Thursday, December 01, 2005
Excel/엑셀 VBA : LenMbcs, LenB, 한글 완성형 문자열 바이트 수 구하기 함수; ANSI String Size
엑셀 비베의 LenB() 함수로, "한글과 영문이 섞인 문자열"의 바이트 수를 구할 때, 원치 않는 결과가 나올 수 있습니다.
원래 영문 1글자는 1바이트, 한글 1글자는 2바이트로 계산되어야 하는데, LenB() 함수는 모든 글자를 2바이트로 계산합니다. 왜냐하면 LenB() 함수는 문자열을 "16비트 유니코드"로 간주하기 때문입니다.
이때는 다음과 같은 LenMbcs() 함수를 사용하면 자연스런 결과가 나옵니다.
즉, 영문/공백/기호 등은 1바이트, 한글/한자 등은 2바이트로 계산됩니다.
참고로, ANSI 라는 것은 유니코드가 아닌 "한글 완성형(euc-kr)" 등의 아스키 인코딩을 지칭합니다.
(엑셀에서 Alt+F11키를 눌러, 비베 에디터를 실행하고, 비베 에디터 메뉴의, "삽입 > 모듈"을 선택한 후, 다음 코드를 붙여 넣습니다.)
비베 에디터에서 F5 키를 누르거나, 엑셀에서 Alt+F8 키를 누르면 VBA 매크로가 실행됩니다.
엑셀 비베에서, 글자 개수와 유니코드 바이트 수 구하기 예제: ▶▶ Excel/엑셀 VBA] 문자열 크기/길이, 글자 수/바이트 수 계산 함수; String Size Function
원래 영문 1글자는 1바이트, 한글 1글자는 2바이트로 계산되어야 하는데, LenB() 함수는 모든 글자를 2바이트로 계산합니다. 왜냐하면 LenB() 함수는 문자열을 "16비트 유니코드"로 간주하기 때문입니다.
이때는 다음과 같은 LenMbcs() 함수를 사용하면 자연스런 결과가 나옵니다.
Function LenMbcs(ByVal str As String)
LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function
LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function
즉, 영문/공백/기호 등은 1바이트, 한글/한자 등은 2바이트로 계산됩니다.
참고로, ANSI 라는 것은 유니코드가 아닌 "한글 완성형(euc-kr)" 등의 아스키 인코딩을 지칭합니다.
ANSI 문자(문자열)의 바이트(Byte) 수 계산 예제
(엑셀에서 Alt+F11키를 눌러, 비베 에디터를 실행하고, 비베 에디터 메뉴의, "삽입 > 모듈"을 선택한 후, 다음 코드를 붙여 넣습니다.)
비베 에디터에서 F5 키를 누르거나, 엑셀에서 Alt+F8 키를 누르면 VBA 매크로가 실행됩니다.
Sub ANSI_String_Length_Example()
e = "ABC" ' 영문 반각 문자 3개이므로, 3바이트
h = "가나다" ' 한글 1글자는 2바이트이므로, 총 6바이트
s = "A 가" ' A(1Byte) + 공백(1Byte) + 가(2Byte) = 4바이트
' 한글 완성형 바이트 수 구하기
result = LenMbcs(e)
MsgBox result & "바이트(ANSI)"
' 출력 결과: 3바이트(ANSI)
result = LenMbcs(h)
MsgBox result & "바이트(ANSI)"
' 출력 결과: 6바이트(ANSI)
result = LenMbcs(s)
MsgBox result & "바이트(ANSI)"
' 출력 결과: 4바이트(ANSI)
End Sub
' 한글 완성형 문자열의 바이트 수 구하기 함수
Function LenMbcs(ByVal str As String)
LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function
e = "ABC" ' 영문 반각 문자 3개이므로, 3바이트
h = "가나다" ' 한글 1글자는 2바이트이므로, 총 6바이트
s = "A 가" ' A(1Byte) + 공백(1Byte) + 가(2Byte) = 4바이트
' 한글 완성형 바이트 수 구하기
result = LenMbcs(e)
MsgBox result & "바이트(ANSI)"
' 출력 결과: 3바이트(ANSI)
result = LenMbcs(h)
MsgBox result & "바이트(ANSI)"
' 출력 결과: 6바이트(ANSI)
result = LenMbcs(s)
MsgBox result & "바이트(ANSI)"
' 출력 결과: 4바이트(ANSI)
End Sub
' 한글 완성형 문자열의 바이트 수 구하기 함수
Function LenMbcs(ByVal str As String)
LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function
엑셀 비베에서, 글자 개수와 유니코드 바이트 수 구하기 예제: ▶▶ Excel/엑셀 VBA] 문자열 크기/길이, 글자 수/바이트 수 계산 함수; String Size Function
tag: office
엑셀 Excel | 워드 Word | VBA 매크로 | 오피스
<< Home