본문 바로가기
엑셀/VBA

[VBA] 이상한 문자(?)의 정체와 제거 방법

by 큐브빌드 2025. 4. 19.
반응형

🧩 현상

간혹 엑셀 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로 다룰 때는 항상 텍스트 정리 전처리를 고려하세요!

 

반응형

댓글