更新日:、 作成日:

VBA 文字列を抽出する

はじめに

Excel VBA マクロの文字列 (String) を抽出する方法を紹介します。

Left 関数」から、文字列の先頭から抽出できます。

Mid 関数」から、文字列の途中から抽出できます。123[456]789[] で囲まれた範囲の文字も抽出できます。

Right 関数」から、文字列の末尾から抽出できます。

Len 関数」から、文字列の文字数を取得できます。

文字列を結合するには「文字列を結合する」をご覧ください。

文字列を抽出する

Left 関数Mid 関数Right 関数」を使用して、文字列を抽出できます。先頭や末尾の文字を削除できます。

  • Left:文字列の先頭から取得する
  • Mid:文字列の途中から取得する
  • Right:文字列の末尾から取得する
Dim s As String

s = Left("123456", 3)   ' 左から 3 文字
Debug.Print(s) ' 123

s = Mid("123456", 2, 3) ' 2 文字目から 3 文字
Debug.Print(s) ' 234

s = Right("123456", 3)  ' 右から 3 文字
Debug.Print(s) ' 456

取得されなかった文字は削除されます。

先頭と末尾からの文字を抽出

Mid 関数」を使用して、2 文字目から最後の 3 文字目までのように抽出できます。引数が複雑なので関数を作成します。

Sub 実行()
    Dim s As String
    
    s = LeftRight("123456789", 2, 3) ' 左から 2 文字、右から 3 文字まで
    Debug.Print(s) ' 234567
    
    s = LeftRight("123456789", 3, 4) ' 左から 3 文字、右から 4 文字まで
    Debug.Print(s) ' 3456
End Sub

' 先頭と末尾の位置を指定して抽出します。
Function LeftRight(ByVal text As String, ByVal startLength As Long, ByVal endLength As Long) As String

    LeftRight = Mid(text, startLength, Len(text) - endLength - startLength + 2)
    
End Function

Len 関数」を使用して文字数を取得し、最後の何文字目のようにできます。

範囲内の文字を抽出

Mid 関数」を使用して、123[456]789 から [] で囲まれた 456 を抽出できます。引数が複雑なので関数を作成します。

Sub 実行()
    Dim s As String
    
    s = MidEnclosed("123[456]789", "[", "]") ' [ ] で囲まれた範囲
    Debug.Print(s) ' 456
    
    s = MidEnclosed("12(34567)89", "(", ")") ' ( ) で囲まれた範囲
    Debug.Print(s) ' 34567
End Sub

' 囲まれた範囲内の文字を抽出します。
Function MidEnclosed(ByVal text As String, ByVal startChar As String, ByVal endChar As String) As String
    Dim l As Long
    Dim r As Long
    l = InStr(text, startChar)
    r = InStrRev(text, endChar)

    MidEnclosed = Mid(text, l + 1, r - l - 1)
End Function

InStr 関数」を使用して、囲み文字の位置を取得しています。

1 文字ずつ抽出

Mid 関数」をループして、1 文字ずつすべての文字を抽出できます。

Dim s As String
s = "123456"

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

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

文字数を取得する

Len 関数」を使用して、文字数を取得できます。

  • Len:文字数を取得します。
  • LenB:文字列のバイト数を取得します。
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") ' バイト数
Debug.Print(i) ' 6

VBA の文字コードは Unicode (UTF-16) です。1 文字 2 バイトで ABC は 6 バイトになります。

半角文字を 1 バイトとするには「StrConv 関数」を使用して、Shift_JIS に変換する必要があります。

Dim i As Integer

i = LenB(StrConv("ABC", vbFromUnicode))
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

Unicode のサロゲートペア文字

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

詳しくは「Len 関数」をご覧ください。