Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기이 글의 목적은 엑셀에서 셀 내부의 불필요한 공백을 신속하고 정확하게 제거하는 방법을 체계적으로 정리하여 실무 데이터 전처리에 즉시 활용하도록 돕는 것이다.
공백은 정렬, 중복 제거, 피벗테이블, VLOOKUP·XLOOKUP·MATCH 같은 조회 함수, 텍스트 비교, 숫자 변환, 데이터 유효성 검사 등 대부분의 데이터 처리 단계에서 오류를 유발한다. 선행 공백과 후행 공백, 단어 사이의 과도한 공백, 웹에서 복사된 비가시 공백(예: CHAR(160)인 NBSP) 등이 대표적이다. 공백을 표준화하지 않으면 동일 값이 서로 다른 값처럼 인식되어 분석 결과가 왜곡된다.
TRIM 함수는 다음과 같이 동작한다.
다음 예제는 기본 공백 정리에 적합하다.
=TRIM(A2) 범위에 바로 적용하려면 동적 배열 또는 채우기를 사용한다.
=TRIM(A2:A100) 동적 배열이 지원되지 않는 버전에서는 첫 셀에 수식을 입력한 뒤 아래로 복사하여 적용한다.
다음 조합은 비인쇄 문자와 NBSP까지 제거하도록 설계한다.
=TRIM(CLEAN(SUBSTITUTE(A2, CHAR(160), " "))) SUBSTITUTE(A2, CHAR(160), " ") : NBSP를 일반 공백으로 치환한다.CLEAN(...) : 제어문자(ASCII 0~31)를 제거한다.TRIM(...) : 선행/후행 공백 제거 및 다중 공백을 단일 공백으로 축소한다.상품코드, 사번 등 내부 공백이 절대 허용되지 않는 필드라면 다음을 사용한다.
=SUBSTITUTE(SUBSTITUTE(A2, CHAR(160), ""), " ", "") 모든 종류의 공백을 삭제하므로 가독성은 떨어지지만 키값 정규화에 적합하다.
일본어·중국어 데이터나 전각 공백(유니코드 U+3000)이 섞인 경우 다음을 사용한다.
=LET(_t,A2, _t1,SUBSTITUTE(_t,CHAR(160)," "), _t2,SUBSTITUTE(_t1,UNICHAR(12288)," "), /* 전각 공백 U+3000 */ TRIM(CLEAN(_t2))) UNICHAR(12288)은 전각 공백이다. 전각 공백을 일반 공백으로 치환한 후 TRIM·CLEAN을 적용한다.
금액·수량 등 숫자 필드에 공백이 섞이면 합계·정렬·필터가 오작동한다. 다음 수식으로 공백을 정리하고 숫자로 변환한다.
=VALUE(SUBSTITUTE(SUBSTITUTE(A2, CHAR(160), ""), " ", "")) 천 단위 구분 쉼표까지 제거하려면 다음을 사용한다.
=VALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, ",",""), CHAR(160), ""), " ", "")) SUBSTITUTE로 추가 제거 후 VALUE를 적용해야 한다.공백 정리와 대소문자 표준화를 동시에 수행하면 분류·그룹화의 정확도가 높아진다.
=UPPER(TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(A2,CHAR(160)," "), UNICHAR(12288), " ")))) 소문자 표준화는 LOWER(...), 단어별 첫 글자만 대문자는 PROPER(...)로 바꿔 적용한다.
표 전체를 한 번에 정리하려면 동적 배열을 사용한다.
=MAP(A2:A100, LAMBDA(x, TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(x,CHAR(160)," "), UNICHAR(12288)," "))))) MAP과 LAMBDA를 사용하면 재사용 가능한 사용자 정의 정리 함수를 손쉽게 구축할 수 있다.
한 번 정의해두면 통합 문서 전반에서 재사용이 편리하다.
=LAMBDA(x, TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(x,CHAR(160)," "), UNICHAR(12288)," ")))) 이 함수를 이름 관리자에서 공백정리로 저장한 뒤 다음처럼 사용한다.
=공백정리(A2) | 상황 | 권장 수식 | 비고 |
|---|---|---|
| 선행·후행 공백과 다중 공백 제거 | =TRIM(A2) | ASCII 32 공백만 처리한다. |
| NBSP와 제어문자까지 제거 | =TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," "))) | 웹 복사 데이터 기본 처방이다. |
| 모든 공백 완전 삭제 | =SUBSTITUTE(SUBSTITUTE(A2,CHAR(160),"")," ","") | 코드·키값 정규화에 사용한다. |
| 전각 공백 포함 다국어 데이터 | =TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(A2,CHAR(160)," "),UNICHAR(12288)," "))) | U+3000 처리 포함이다. |
| 숫자 텍스트 정리 후 숫자화 | =VALUE(SUBSTITUTE(SUBSTITUTE(A2,CHAR(160),"")," ","")) | 합계·피벗 정상화이다. |
| 대량 범위 일괄 정리 | =MAP(A2:A100,LAMBDA(x,TRIM(CLEAN(SUBSTITUTE(x,CHAR(160)," "))))) | 동적 배열 전제이다. |
=LEN(A2)>LEN(TRIM(A2))이면 일반 공백 중복이 존재한다.=CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))의 결과에 160이 보이면 NBSP이다.CLEAN 적용 후 길이 변화를 본다.SUBSTITUTE(A2,CHAR(9)," ")로 먼저 치환한 후 TRIM을 적용한다.대용량·반복 작업은 파워 쿼리를 사용하면 효율적이다.
NBSP(복사한 공백 붙여넣기) → 일반 공백으로 치환한다.파워 쿼리는 새 파일 교체 시에도 같은 규칙을 재사용하므로 표준화된 파이프라인 구축에 유리하다.
=CHAR(160)을 만든 뒤 복사하여 찾기 상자에 붙여넣는다.입력 단계에서 선행·후행 공백을 금지하는 규칙을 만들면 사후 정리 비용이 줄어든다.
=EXACT(A2,TRIM(A2)) 위 논리를 데이터 유효성 검사 > 사용자 지정 수식으로 적용하면 공백이 낀 입력을 거부한다.
조회 전후로 모두 공백 정규화를 적용한다.
=XLOOKUP( TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(E2,CHAR(160)," "),UNICHAR(12288)," "))), MAP(A2:A100,LAMBDA(x,TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(x,CHAR(160)," "),UNICHAR(12288)," "))))), B2:B100 ) 키와 조회 범위의 정리 규칙을 동일하게 유지하면 불일치 문제가 사라진다.
정리 전후 값의 동등성을 검증하는 컬럼을 추가한다.
=IF(EXACT(B2, 공백정리(A2)), "OK", "FIX") 집계하여 오류율을 추적하면 공급원 데이터 품질을 가시화할 수 있다.
=PROPER(TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(A2,CHAR(160)," "),UNICHAR(12288)," ")))) 고객명 내부의 다중 공백을 하나로 축소하고 제어문자를 제거한 뒤 표준 대소문자로 통일한다.
=TEXTJOIN(" ", TRUE, TRIM(CLEAN(SUBSTITUTE(B2,CHAR(160)," "))), TRIM(CLEAN(SUBSTITUTE(C2,CHAR(160)," "))), TRIM(CLEAN(SUBSTITUTE(D2,CHAR(160)," "))) ) NULL 및 공백만 있는 항목을 자동으로 건너뛰면서 주소 라인을 병합한다.
=UPPER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,CHAR(160),"")," ",""),"-","")) 공백과 하이픈을 제거하고 대문자로 표준화하여 식별 키로 사용한다.
=LEN(A2)-LEN(SUBSTITUTE(A2," ",""))로 일반 공백 수를 세고, 예상과 다르면 NBSP 가능성을 고려한다.=LET(t, A2, t1, SUBSTITUTE(t,CHAR(160)," "), TRIM(CLEAN(t1))) | 항목 | 체크내용 | 통과 기준 |
|---|---|---|
| 입력 차단 | 유효성 검사로 선행·후행 공백 거부 설정을 했는가 | TRUE |
| NBSP 처리 | CHAR(160) 치환 로직이 포함되었는가 | 포함 |
| 전각 공백 | UNICHAR(12288) 치환 로직이 포함되었는가 | 포함 |
| 검증 컬럼 | 정리 전후 EXACT 비교로 품질을 측정하는가 | OK/FIX 지표 산출 |
| 자동화 | 파워 쿼리 또는 LAMBDA로 재사용 가능한 파이프라인을 구성했는가 | 구성 |
| 성능 | LET 활용 및 값 붙여넣기로 재계산 최소화했는가 | 최적 |
NBSP(CHAR(160))나 전각 공백(U+3000) 등 일반 공백이 아닌 문자가 포함되었을 가능성이 높다. SUBSTITUTE로 해당 문자를 일반 공백으로 치환한 뒤 CLEAN과 TRIM을 연계해야 한다.
단어 사이 공백까지 제거하려면 =SUBSTITUTE(SUBSTITUTE(A2,CHAR(160),"")," ","")를 사용한다. 코드 필드 등 공백이 허용되지 않는 경우에만 적용한다.
VALUE 또는 단항 더하기(--)를 사용해 숫자로 강제 변환한다. 예: =VALUE(SUBSTITUTE(A2," ",""))이다.
데이터가 반복·대용량이면 파워 쿼리가 유리하다. 일회성·소량이면 시트 수식이 빠르다. 표준 프로세스라면 파워 쿼리로 규칙을 고정해 재사용한다.
동적 배열, MAP, LAMBDA, LET은 최신 365에서 지원한다. 구버전은 보조 열과 복사 채우기를 사용한다. 핵심 로직(TRIM·CLEAN·SUBSTITUTE)은 구버전에서도 동일하게 동작한다.