サイトについて      連絡先   検索

VBA Len 関数

はじめに

Excel VBA マクロの Len 関数を紹介します。

Len 関数は、文字列の文字数を返します。または構造体など型のサイズを返します。

文字列の文字数を知りたいときに使用します。

  • 目次
    • 構文
    • 解説
    • 使用例

構文

Len(文字列)
文字列の文字数を取得します。

Len()
のサイズを取得します。

引数「文字列」文字列を指定します。
引数「型」構造体や Integer 型の変数を指定します。
戻り値の型数値型 (Long)

解説

引数に String 型を指定すると文字数を、それ以外の型を指定するとその型のバイト数を返します。

引数「文字列」が空文字""なら0を返します。

引数「型」が Byte 型なら1を、Integer 型なら2を、Long 型なら4を返します。

LenB 関数を使用すると、VBA の文字コードは Unicode (UTF-16) なので、すべての 1 文字が 2 バイトになります。これを半角文字だけ 1 バイトとする Shift_JIS にするには「StrConv 関数」を使用して変換します。

Unicode のサロゲートペア文字は 2 文字として扱います。これを 1 文字として取得したいときは、関数を作成します。

使用例

文字数を取得する。


Dim i As Integer

i = Len("123456")
Debug.Print(i) ' 6

i = Len("あいう")
Debug.Print(i) ' 3

i = Len("")
Debug.Print(i) ' 0

文字数だけループする。


Dim s As String
s = "123456"

Dim 文字数 As Integer
文字数 = Len(s)

Dim i As Integer
For i = 1 To 文字数
    ' 処理
    Debug.Print (Mid(s, i, 1)) ' 1 2 3 4 5 6
Next

型のバイト数を取得する。


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 バイトとして取得する。


Dim i As Integer

i = LenB(StrConv("ABC", vbFromUnicode))    ' UTF-16 を Shift_JIS に変換
Debug.Print(i) ' 3

i = LenB(StrConv("ABC", vbFromUnicode)) ' UTF-16 を Shift_JIS に変換
Debug.Print(i) ' 6

サロゲートペア文字を 1 文字として取得する。LenSurrogate 関数を作成して文字数を取得しています。

サロゲートペア文字を判定する IsSurrogate 関数を使用しています。詳しくは「Unicode 文字の入力や読み込み」をご覧ください。

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
  • 目次
    • 構文
    • 解説
    • 使用例