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

VBA 文字列を操作する

はじめに

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

検索や位置、比較、結合、文字数の取得、分割などができます。

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

  • 目次
    • 検索する
    • 比較する
    • 結合する
    • 文字数を取得する
    • 分割する

検索する

InStr 関数」を使用して文字列を検索できます。最初に見つかった位置を取得できます。見つからないときは 0 を返します。

引数には(検索元, 検索キーワード)を渡します。


Dim i As Integer

i = InStr("ABCDEF", "C")  ' C を検索する
Debug.Print(i) ' 3

i = InStr("ABCDEF", "あ") ' あ を検索する
Debug.Print(i) ' 0

すべて検索

キーワードが複数見つかるときは、最初に見つかった位置を取得します。2 番目以降に見つかった位置を取得したいときは、第 1 引数に検索の開始位置を指定できます。1 が最初の文字です。

このときの引数には(開始位置, 検索元, 検索キーワード)を渡します。「InStr 関数」は最初の引数を省略できる変わった関数です。


Dim i As Integer ' 開始位置
i = 0

Do
    i = InStr(i + 1, "ABCABCABC", "A") ' A をすべて検索する
    Debug.Print(i) ' 1 4 7 0  
Loop Until i = 0

0 が返ってきたら、すべて検索したことになります。

大文字と小文字

第 4 引数で「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別できます。


Dim i As Integer

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

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

比較する

文字列が等しいかどうかは「演算子」の=<>を使用します。


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) ' 0

i = StrComp("ABC", "abc") ' 等しくない
Debug.Print(i) ' -1

大文字と小文字

第 3 引数で「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別できます。


Dim i As Integer

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

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

通常は比較演算子を使用して比較し、大文字と小文字を区別したくないときに「StrComp 関数」を使用します。

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" ' 1 2 3 を結合する
Debug.Print(s) ' 123

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


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

文字数を取得する

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


Dim i As Integer

i = Len("ABC")  ' 文字数
Debug.Print(i) ' 3

i = LenB("ABC") ' バイト数
Debug.Print(i) ' 6

VBA の文字コードは Unicode です。1 文字 2 バイトで "ABC" は 6 バイトになります。

半角文字を 1 バイトとするには Shift_JIS に変換する必要があります。


Dim i As Integer

i = LenB(StrConv("ABC", vbFromUnicode))
Debug.Print(i) ' 3

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

分割する

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
  • 目次
    • 検索する
    • 比較する
    • 結合する
    • 文字数を取得する
    • 分割する