mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Thursday, December 01, 2005

Excel/엑셀 VBA : LenMbcs, LenB, 한글 완성형 문자열 바이트 수 구하기 함수; ANSI String Size


엑셀 비베의 LenB() 함수로, "한글과 영문이 섞인 문자열"의 바이트 수를 구할 때, 원치 않는 결과가 나올 수 있습니다.

원래 영문 1글자는 1바이트, 한글 1글자는 2바이트로 계산되어야 하는데, LenB() 함수는 모든 글자를 2바이트로 계산합니다. 왜냐하면 LenB() 함수는 문자열을 "16비트 유니코드"로 간주하기 때문입니다.

이때는 다음과 같은 LenMbcs() 함수를 사용하면 자연스런 결과가 나옵니다.
Function LenMbcs(ByVal str As String)
  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



엑셀 비베에서, 글자 개수와 유니코드 바이트 수 구하기 예제: ▶▶ Excel/엑셀 VBA] 문자열 크기/길이, 글자 수/바이트 수 계산 함수; String Size Function




tag: office
엑셀 Excel | 워드 Word | VBA 매크로 | 오피스

0 Comments:

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top