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

VBA 文字列の操作

はじめに

Excel VBA の 文字列 (String) を操作する方法を紹介します。

VBA の文字列の検索、比較、結合、取得、分割などを紹介します。

大文字と小文字、半角と全角、ひらがなとカタカナを区別するかしないかを選択できます。

文字列の検索

文字列を検索するには「InStr 関数」を使用します。引数には (検索元, 検索キーワード) を渡します。最初に見つかった位置を取得できます。検索した文字が見つからないときは 0 が返ります。


Dim i As Integer
i = InStr("ABCDEF", "C")
Debug.Print (i) ' 3

i = InStr("ABCDEF", "あ")
Debug.Print (i) ' 0

「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別するには最後の引数を指定します。


Dim i As Integer
i = InStr(1, "abcABC", "A", vbBinaryCompare) ' 区別する
Debug.Print (i) ' 4

i = InStr(1, "abcABC", "A", vbTextCompare) ' 区別しない
Debug.Print (i) ' 1

すべて検索

最初に見つかった位置だけでなく 2 番目以降に見つかった位置を取得したいときは、第一引数に検索の開始位置を指定できます。1 が最初の文字です。

次のコードで、すべての一致する位置を取得できます。


Dim i As Integer
i = 1

Do While i <> 0
    i = InStr(i + 1, "ABCABCABC", "C") ' 2 番目以降の位置
    Debug.Print (i) ' 3 6 9 0
Loop

文字列の比較

文字列が等しいかどうかは「演算子」の比較演算子 =, <> で比較できます。


If "ABC" = "abc" Then ' 等しい
    Debug.Print ("等しい")
End If

If "ABC" <> "abc" Then ' 等しくない
    Debug.Print ("等しくない")
End If

文字列の大小を比較するには「StrComp 関数」を使用します。引数には (文字列1, 文字列2) を渡します。

比較した結果は次の値を返します。0 が等しくて、それ以外が等しくない結果です。ソート処理に使えます。

結果 比較
-1文字列1 < 文字列2
0文字列1 = 文字列2
1文字列1 > 文字列2
Null文字列1 か 2 が Null

Dim i As Integer
i = StrComp("ABC", "abc")
Debug.Print (i) ' -1

Dim v As Variant
v = StrComp("ABC", Null)
Debug.Print (v) ' Null

「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別するには最後の引数を指定します。


Dim i As Integer
i = StrComp("ABC", "abc", vbBinaryCompare) ' 区別する
Debug.Print (i) ' -1

i = StrComp("ABC", "abc", vbTextCompare) ' 区別しない
Debug.Print (i) ' 0

Like 演算子

Like 演算子を使ってワイルドカードで判定できます。

パターン 説明 使用例 一致例
?任意の 1 文字"あい?"あいう, あいか, あいも
*0 個以上の文字"*AB"AB, 0AB, 1AB
#任意の 1 桁 (0–9)##10, 22, 59
[charlist]charlist に含まれる任意の 1 文字[A-C]
[A, H, L]?
A, B, C
A1, H2, L3
[!charlist]charlist に含まれない任意の 1 文字[!A-C]
[!A, B, C]?
D, E, F

Dim b As Boolean

b = "あいうえお" Like "あい*"     ' "あい" で始まるか
Debug.Print (b) ' True

b = "あいうえお" Like "あい?"     ' "あい" で始まる 3 文字か
Debug.Print (b) ' False

b = "あいうえお" Like "あいうえ?" ' "あいうえ" で始まる 5 文字か
Debug.Print (b) ' True

b = 12 Like "##"  ' 2 桁の数字か
Debug.Print (b) ' True
         
b = 12 Like "###" ' 3 桁の数字か
Debug.Print (b) ' Flase

b = "AZZ" Like "[A-C]*"     ' A ~ C の文字で始まるか
Debug.Print (b) ' True

b = "AZZ" Like "[!A-C]*"    ' A ~ C 以外の文字で始まるか
Debug.Print (b) ' Flase
         
b = "AZZ" Like "[A, D, G]*" ' A か D か G で始まるか
Debug.Print (b) ' True

文字列の結合

文字列を結合するには & を使用します。


Dim s As String
s = "1" & "2" & "3"
Debug.Print (s) ' 123

+ を使っても結合できますが、足し算と混同したり、数値が入っていると実際に足し算してしまうため & を使うようにします。


Dim s As String
s = "1" + "2" + 3
Debug.Print (s) ' 15

文字数の取得

文字数を取得するには「Len 関数」または LenB 関数を使用します。


Dim i As Integer
i = Len("ABC")
Debug.Print (i) ' 3

i = LenB("ABC")
Debug.Print (i) ' 6

VBA の文字コードは Shift-JIS なので一文字 2 バイトで "ABC" は 6 バイトになります。

文字列の分割

文字列を分割するには「Left 関数」、「Right 関数」または「Mid 関数」を使用します。


Dim s As String
s = Left("ABCDEF", 3)
Debug.Print (s) ' "ABC"

s = Right("ABCDEF", 3)
Debug.Print (s) ' "DEF"

s = Mid("ABCDEF", 2, 3)
Debug.Print (s) ' "BCD"

関連ページ