VBA 文字列を比較する

はじめに

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

等しい =、等しくない <> や、小さい <、大きい >など、比較演算子を使用して文字列を比較できます。

StrComp 関数」から、大文字と小文字、半角と全角、ひらがなとカタカナを区別しないで比較できます。

文字列 Like パターン のようにして、ワイルドカードで比較もできます。

並び替えをするには「配列の並び替え」をご覧ください。
  • 目次
    • 文字列を比較する
    • 文字列をワイルドカードで比較する

文字列を比較する

比較演算子を使用して文字列を比較できます。

= を入力して、文字列が等しいか判定できます。

<> を入力して、等しくないか判定できます。

文字列の大小も比較できます。

Dim b As Boolean
b = ("ABC" = "abc") ' 等しいか
Debug.Print(b) ' False

b = ("ABC" <> "abc") ' 等しくないか
Debug.Print(b) ' True

b = ("A" < "B") ' 小さいか
Debug.Print(b) ' True

b = ("B" > "A") ' 大きいか
Debug.Print(b) ' True
比較演算子について詳しくは「演算子」をご覧ください。

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

StrComp 関数

StrComp 関数」を使用して、文字列が等しいかや、大小を比較できます。等しいときは 0 を返します。小さいときは -1、大きい時は 1 を返します。

引数には (文字列1, 文字列2) を指定します。

比較 結果
文字列1 < 文字列2-1
文字列1 = 文字列20
文字列1 > 文字列21
文字列1 か 2 が NullNull
Dim i As Integer

i = StrComp("ABC", "ABC")
Debug.Print(i) ' 0、等しい

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

i = StrComp("A", "B")
Debug.Print(i) ' -1、小さい

i = StrComp("B", "A")
Debug.Print(i)  ' 1、大きい

大文字より小文字が大きい値です。先頭の文字から判定されるので文字数は関係ありません。比較演算子を使用したときも同じです。

Dim i As Integer

i = StrComp("A", "a")
Debug.Print(i) ' -1、小さい

i = StrComp("a", "A")
Debug.Print(i)  ' 1、大きい

i = StrComp("", "B")
Debug.Print(i) ' -1、小さい、文字がないときは小さいになる

i = StrComp("BB", "BBB")
Debug.Print(i) ' -1、小さい、2 文字目まで同じ、3 文字目がないので小さいになる

i = StrComp("BB", "BAB")
Debug.Print(i)  ' 1、大きい、2 文字目の B と A で大きいになる

i = StrComp("BB", "BCB")
Debug.Print(i) ' -1、小さい、2 文字目の B と C で小さいになる

大文字と小文字

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

  • vbBinaryCompare (既定):区別する
  • vbTextCompare:区別しない
Dim i As Integer

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

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

i = StrComp("アイウ", "アイウ", vbBinaryCompare) ' 区別する
Debug.Print(i) ' -1

i = StrComp("アイウ", "アイウ", vbTextCompare)   ' 区別しない
Debug.Print(i) ' 0

i = StrComp("あいう", "アイウ", vbBinaryCompare) ' 区別する
Debug.Print(i) ' -1

i = StrComp("あいう", "アイウ", 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
[パターン]パターンの文字 ? * # [ ] と比較する[*]?*あ, *い, *A
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

b = "*あ" Like "[*]?" ' * で始まる 2 文字か
Debug.Print(b) ' True