文字列の長さを取得する(Len/LenB関数)|Excel VBA |
Len関数は、引数に指定した文字列の文字数を、LenB関数はバイト数を返します。
次のサンプルは、半角文字列、全角文字列、半角と全角が混在した文字列について、
文字数とバイト数をメッセージボックスに表示します。
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関数でバイト数を取得すればよいでしょう。
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関数などと組み合わせて使用する場合、文字数単位の関数とバイト数単位の関数を同時に使用することは、あまりおすすめできません。どちらか一方に統一した方が、コードが読みやすくなり、記述のミスも少なくなります。