更新日:、 作成日:
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 関数」をご覧ください。