更新日:、 作成日:
VBA Len 関数:文字数を取得する
はじめに
Excel VBA マクロの Len 関数から文字数を取得する方法を紹介します。
Len 関数は、文字列の文字数を返します。または構造体など型のバイト数を返します。
LenB 関数は、文字列のバイト数を返します。
ABC なら、Len 関数は 3 を返します。LenB 関数は 6 を返します。
Integer 型の変数なら 2 を返します。
文字列の文字数をカウントしたいときに使用します。
Len 関数、LenB 関数の引数と戻り値
Len(文字列)
文字列の文字数を取得します。
Len(型)
型のサイズを取得します。
引数「文字列」 | 文字列を指定します。 |
引数「型」 | 構造体や Integer 型の変数を指定します。 |
戻り値の型 | 数値型 (Long) |
LenB(文字列)
文字列のバイト数を取得します。
引数「文字列」 | 文字列を指定します。 |
戻り値の型 | 数値型 (Long) |
解説
Len 関数
引数に String 型を指定すると文字数を、それ以外の型を指定するとその型のバイト数を返します。
引数「文字列」が空文字 "" なら 0 を返します。
引数「型」が Byte 型なら 1 を、Integer 型なら 2 を、Long 型なら 4 を返します。
Unicode のサロゲートペア文字 𩸽 や 😃 は 2 文字として扱います。これを 1 文字として取得したいときは、関数を作成します。
LenB 関数
文字列のバイト数を取得できます。
VBA の文字コードは Unicode (UTF-16) です。1 文字 2 バイトで ABC は 6 バイトになります。これを半角文字だけ 1 バイトとするには「StrConv 関数」を使用して、文字コードを Shift_JIS に変換します。
スポンサーリンク
使用例
Len 関数の使用例を紹介します。
文字数を取得する
文字列の文字数を取得します。
Dim i As Integer
i = Len("123456")
Debug.Print(i) ' 6
i = Len("あいう")
Debug.Print(i) ' 3
i = Len("")
Debug.Print(i) ' 0
i = Len("ABC") ' 文字数
Debug.Print(i) ' 3
i = LenB("ABC") ' バイト数、1 文字 2 バイト
Debug.Print(i) ' 6
半角文字を 1 バイトとして取得する
「StrConv 関数」を使用して、Shift_JIS に変換して半角文字を 1 バイトとして取得できます。
Dim i As Integer
i = LenB(StrConv("ABC", vbFromUnicode)) ' Shift_JIS に変換
Debug.Print(i) ' 3
i = LenB(StrConv("ABC", vbFromUnicode))
Debug.Print(i) ' 6
i = LenB(StrConv("アイウ", vbFromUnicode))
Debug.Print(i) ' 3
i = LenB(StrConv("アイウ", vbFromUnicode))
Debug.Print(i) ' 6
変数のバイト数を取得する
変数の型のバイト数を取得します。
Dim b As Byte
Dim i As Integer
Dim l As Long
i = Len(b)
Debug.Print(i) ' 1
i = Len(i)
Debug.Print(i) ' 2
i = Len(l)
Debug.Print(i) ' 4
1 文字ずつループする
「Mid 関数」を使用して、1 文字ずつすべての文字を抽出できます。
Dim s As String
s = "123456789"
Dim i As Integer
For i = 1 To Len(s)
' 処理
Debug.Print(Mid(s, i, 1)) ' 1 2 3 4 5 6 7 8 9
Next
サロゲートペア文字を 1 文字として取得する
サロゲートペア文字を 1 文字として取得するために、LenSurrogate 関数を作成して文字数を取得しています。
Sub 実行()
Dim s As String
s = WorksheetFunction.Unichar(171581) ' 𩸽
Debug.Print(Len(s)) ' 2
Debug.Print(LenSurrogate(s)) ' 1
End Sub
' サロゲートペア文字を 1 文字として文字数を取得します。
Function LenSurrogate(ByVal text As String) As Long
Dim count As Long ' サロゲートペアを 1 文字とした文字数
' 文字数を数える
Dim i As Long
For i = 1 To Len(text)
If IsSurrogate(Mid(text, i)) Then
' サロゲートペア文字
i = i + 1
End If
count = count + 1
Next
LenSurrogate = count
End Function
スポンサーリンク