• ベストアンサー

EXCELのVBAでLenB関数について

VBA初心者の質問です。 EXCELのVBAでセルの文字数バイト数を取得したくてLenB関数を使用しました。 しかし半角で入力してある文字(数字)でも1文字2バイトになってしまいます。 具体的に言うと以下の通りです。 ---コード--------------  Dim test As Integer  test = Len(Activecell.Value) -----------------------  Activecellのセル内容「東京1234」  TEST→「8」と取得したいのに「12」になってしまう。 -------------------- EXCEL上ではキチンと「12」になるのですがVBAでは違うのでしょうか。 どなたかご存じでしたら、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

VBA は内部的に UNICODE という文字コードを使用していて、これは半角の英数字も 2 byte です。 文字のバイト数を取得したいのなら、UNICODE → Shift JIS に変換しなければなりません。 test = LenB(StrConv("東京1234", vbFromUnicode)) とすればOKです。

egao
質問者

お礼

ありがとうございました。希望通りの値を取得することが出来ました。またよろしくお願いいたします。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

VisualBasicのヘルプでも MyString = "ABc"の例で MyLen = LenB(MyString) 「' Windows の場合は 6、」と隅の方に書いてあって、Unicodeとの関連が示唆されています。

egao
質問者

お礼

ありがとうございます。参考になりました。

  • mi-si
  • ベストアンサー率35% (200/567)
回答No.2

#1氏の補足 WindowsNT/2000/XP、Office2000以降、VB6以降が内部的に使っているのはUNICODEのUCS-2エンコードです。 UNICODEでもエンコードがUTF-8だと半角英数字は1byteになります。(その代わり漢字が3byteになりますが)、UCS-2なので英数でも2byte固定になります。

egao
質問者

お礼

ありがとうございます。なるほどです。

関連するQ&A