更新日:、 作成日:
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 = 文字列2 | 0 |
文字列1 > 文字列2 | 1 |
文字列1 か 2 が Null | Null |
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