HOME > 即効テクニック > Excel VBA > 文字列操作関連のテクニック > 文字列の長さを取得する(Len/LenB関数)

文字列の長さを取得する(Len/LenB関数)|Excel VBA

文字列操作関連のテクニック

文字列の長さを取得する(Len/LenB関数)

(Excel 2000/2002/2003/2007/2010)

Len関数は、引数に指定した文字列の文字数を、LenB関数はバイト数を返します。
次のサンプルは、半角文字列、全角文字列、半角と全角が混在した文字列について、
文字数とバイト数をメッセージボックスに表示します。

●サンプル1●

Sub Sample()
    Dim HalfStr As String, FullStr As String, MixedStr As String
    
    HalfStr = "moug"        '半角4文字
    FullStr = "モーグ"      '全角3文字
    MixedStr = "Q&A掲示板"  '半角3文字全角3文字
    
    MsgBox HalfStr & " : " & Len(HalfStr) & vbCrLf & _
           FullStr & " : " & Len(FullStr) & vbCrLf & _
           MixedStr & " : " & Len(MixedStr), , "Len関数"
    
    MsgBox HalfStr & " : " & LenB(HalfStr) & vbCrLf & _
           FullStr & " : " & LenB(FullStr) & vbCrLf & _
           MixedStr & " : " & LenB(MixedStr), , "LenB関数"
End Sub

VBAでは文字列をUnicode形式で扱います。
そのためLenB関数は、半角/全角にかかわらず、すべての文字を2バイトとして計算したバイト数を返します。
サンプル1を実行すると、Len関数は4、3、6を返し、LenB関数は8、6、12を返します。

では、等幅フォントで印字するときの文字幅のように、半角文字は1バイト、全角文字を2バイトとしたバイト数を求めるにはどうしたらよいでしょうか。
「moug」は4、「モーグ」は6、「Q&A掲示板」は9のような結果を得たい場合です。

それには、StrConv関数で文字列をいったんANSI形式に変換し、変換後の文字列をもとにLenB関数でバイト数を取得すればよいでしょう。

●サンプル2●

Sub Sample2()
    Dim HalfStr As String, FullStr As String, MixedStr As String
    
    HalfStr = "moug"        '半角4文字
    FullStr = "モーグ"      '全角3文字
    MixedStr = "Q&A掲示板"  '半角3文字全角3文字
    
    MsgBox HalfStr & " : " & LenB(StrConv(HalfStr, vbFromUnicode)) & vbCrLf & _
           FullStr & " : " & LenB(StrConv(FullStr, vbFromUnicode)) & vbCrLf & _
           MixedStr & " : " & LenB(StrConv(MixedStr, vbFromUnicode)) _
           , , "半角を1バイト、全角を2バイトで計算"
End Sub

ワークシート関数にも、VBA関数と同じ名前のLEN関数/LENB関数があります。
このうち、LENB関数はVBAのLenB関数と異なり、半角文字は1バイト、全角文字を2バイトとしたバイト数を返します。
文字列を直接指定する場合や、セルに対象の文字列がある場合は、ワークシート関数のLENB関数を使ってもよいでしょう。
ただし、ワークシート関数のLEN関数やLENB関数は、WorksheetFunctionオブジェクトのメンバにはないので、ApplicationオブジェクトのEvaluateメソッドを使用します。

MsgBox Application.Evaluate("LENB(""moug"")")  '文字列を直接指定
MsgBox Application.Evaluate("LENB(A1)")        'セルA1の文字列を指定

Evaluateメソッドは角カッコを使って次のように書くこともできます。

MsgBox [LENB("moug")]
MsgBox [LENB(A1)]

●ポイント●

Len関数をMid関数などと組み合わせて使用する場合、文字数単位の関数とバイト数単位の関数を同時に使用することは、あまりおすすめできません。どちらか一方に統一した方が、コードが読みやすくなり、記述のミスも少なくなります。