Len、LenB
Len関数は引数文字列の文字数を返します。
LenB関数は引数文字列の文字数×2を返します。バイト数ではありません。
Shift-JISとしての全角を2バイト、半角を1バイトとするバイト数を取得したい場合は「VBAでバイト単位でのLenとMidとLeftとRight」にShift-JISの感覚で使えるLen関数を紹介していますので参考にしてください。
LenB関数はバイト単位という説明は間違い
日本語圏のLenB関数はそのままではほとんど使い物になりません。上で紹介しているような使い方に限定されます。
よく、LenB関数は文字列のバイト数を返却する、という説明を目にするのですが、日本語圏での説明としては不十分です。
実際にはバイト数ではなく、文字数×2が返却されます。
これはLenB関数がShift-JIS換算のバイト数ではなく、2バイト言語ともいわれるDBCS言語のバイト数換算になっていることが原因です。
このことについては「VBAのByte単位用関数の問題点」に詳しく書いています。あなたがファイルや電文などをShift-JIS換算で判定しなければならないような場合は読んでみてください。
構文
1 2 |
Function Len(Expression) As Variant Function LenB(Expression) As Variant |
Expression | 長さを知りたい文字列を指定します。 |
戻り値 | 引数文字列の長さを内部処理形式がLongのVariantの値で返します。 |
ワークシート関数のLenB関数との違い
ワークシート関数にもLenB関数がありますが、こちらは半角文字を1バイト、全角文字を2バイトとしてShift-JISコード体系の扱いになっています。
VBA関数のLenB関数のDBCSコード体系とは異なりますので注意が必要です。
サンプルコード
Len関数とLenB関数とShift-JIS換算のバイト数取得用のそれぞれで文字列長を取得するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub LenTest() Dim s Dim l s = "abあ1あ" '// Len関数 l = Len(s) Debug.Print "Len [" & l & "]" '// LenB関数 l = LenB(s) Debug.Print "LenB [" & l & "]" '// Shift-JISのバイト数換算のLen関数 l = LenB(StrConv(s, vbFromUnicode)) Debug.Print "バイト数用Len [" & l & "]" End Sub |
実行結果
1 2 3 |
Len [5] LenB [10] バイト数用Len [7] |