- ベストアンサー
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では違うのでしょうか。 どなたかご存じでしたら、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
VBA は内部的に UNICODE という文字コードを使用していて、これは半角の英数字も 2 byte です。 文字のバイト数を取得したいのなら、UNICODE → Shift JIS に変換しなければなりません。 test = LenB(StrConv("東京1234", vbFromUnicode)) とすればOKです。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
VisualBasicのヘルプでも MyString = "ABc"の例で MyLen = LenB(MyString) 「' Windows の場合は 6、」と隅の方に書いてあって、Unicodeとの関連が示唆されています。
お礼
ありがとうございます。参考になりました。
- mi-si
- ベストアンサー率35% (200/567)
#1氏の補足 WindowsNT/2000/XP、Office2000以降、VB6以降が内部的に使っているのはUNICODEのUCS-2エンコードです。 UNICODEでもエンコードがUTF-8だと半角英数字は1byteになります。(その代わり漢字が3byteになりますが)、UCS-2なので英数でも2byte固定になります。
お礼
ありがとうございます。なるほどです。
お礼
ありがとうございました。希望通りの値を取得することが出来ました。またよろしくお願いいたします。