엑셀/VBA
[VBA] 이상한 문자(?)의 정체와 제거 방법
큐브빌드
2025. 4. 19. 07:58
반응형
🧩 현상
간혹 엑셀 VBA로 XML 파일을 LOAD 하여 텍스트를 변수로 등록할 때 의도하지 않은 "?" 문자가 보이는 경우가 있습니다.
※ 다시 하니 정상으로 되어서 그냥 강제로 한번 만들어봤습니다.
물론 코드를 보시면 홍길동이 다르다는 것을 알지만 해당 변수가 XML에서 불러온 값이라면 당혹스러웠을 겁니다.
① 을 보시면 변수에는 동일한 홍길동? 값을 보유하고 있지만
지금부터 작성하는 아래 내용을 통해서 ② , ③ 이미지와 동일하게 2개의 물음표는 다른 값을 나타내는 것을 알 수 있게 됩니다.
🔍 원인: ChrW(160), Non-breaking space (NBSP)
문제의 정체는 바로 ChrW(160), 즉 non-breaking space(줄바꿈이 되지 않는 특수 공백문자)입니다.
- 우리가 흔히 사용하는 스페이스(공백)는 Chr(32)
- 그러나 웹/문서/XML 등에서는 ChrW(160)이 섞여 있는 경우가 많습니다
- 이 문자는 일반적으로 눈에 보이지 않거나?로 표시됩니다
🔧 확인 방법: ASCW 함수 활용
아래 코드를 사용하면 문자열 속 문자들의 Unicode 값을 확인할 수 있어 어떤 문자가 들어있는지 쉽게 확인할 수 있습니다.
Sub TEST2(TXT As String)
Dim i As Integer
For i = 1 To Len(TXT)
Debug.Print Mid(TXT, i, 1), AscW(Mid(TXT, i, 1))
Next i
End Sub
이렇게 하면 콘솔에 문자별 유니코드 값이 출력되고, 값이 160인 문자가 있으면 그것이 바로 문제의 주범입니다.
🧼 해결 방법: ChrW(160) 제거하기
아래와 같이 VBA의 Replace 함수를 사용해 해당 문자를 제거할 수 있습니다.
txt = Replace(txt, ChrW(160), "") ' 빈칸으로 제거
또는 일반 스페이스로 바꾸고 싶다면:
txt = Replace(txt, ChrW(160), " ") ' 일반 스페이스로 변환
💡 참고 팁
- Word나 웹에서 복사한 텍스트, 또는 외부 시스템에서 생성한 XML에 ChrW(160)이 자주 포함됩니다.
- 이런 공백은 눈에는 보이지 않지만 비교 연산 시 오류의 원인이 될 수 있습니다.
- XML을 VBA로 다룰 때는 항상 텍스트 정리 전처리를 고려하세요!
반응형