VBAで文字列を比較する方法を紹介します。
比較演算子 = と <>
文字列を単純に比較するには、比較演算子= 、<>を使用します。=は「等しい」(完全一致)、<>は「等しくない」です。このとき、大文字/小文字は区別されます。
下記に例を示します。左辺の"EXCEL VBA"のスペースは一つとします。
"EXCEL VBA" = "EXCEL VBA" →成立
"EXCEL VBA" = "Excel VBA" →不成立(小文字があるので等しくない)
"EXCEL VBA" = "EXCEL VBA" →不成立(右辺にはスペースが3つある)
<>の場合は成立/不成立が上記の逆となります。
StrComp関数
StrComp関数は、文字列比較をして、結果を数値で返します。構文は下記です。
1 |
StrComp([文字列1], [文字列2], [比較モード]) |
第1,2引数には比較する文字列を入れます。第3引数は省略可で、規定値は「vbBinaryCompare」(大文字/小文字を区別する)です。ここで、「vbTextCompare」を指定すると大文字/小文字を区別せず比較します。戻り値は、等しい場合は「0」を返し、等しくない場合は文字コードによる大小比較をして「-1」または「1」を返します。
第3引数(比較モード)に注目しつつ、下記をご覧下さい。
1 2 3 4 |
'(1)vbBinaryCompare(規定値)で比較 Debug.Print StrComp("EXCEL VBA", "Excel VBA") '(2)vbTextCompareで比較(2) Debug.Print StrComp("EXCEL VBA", "Excel VBA", vbTextCompare) |
[実行結果]
(1)では等しくないと判断されていたものが、(2)では、大文字/小文字の区別をせずに比較したため一致(0)と判断されています。大文字/小文字の区別をせずに比較したい時は、StrComp関数が適しています。
Like演算子
上記2つの方法が「一致するか、しないか」を調べるのに対し、Like演算子は、「含むか、含まないか」といったより柔軟な比較ができます。構文は下記です。
1 |
[結果]= [文字列] Like (パターン) |
戻り値[結果]はTrue(真)またはFalse(偽)です。[文字列]が(パターン)に一致するかどうかを調べます。(パターン)は下記を組み合わせた文字列を記述します。
?:任意の1文字 *:任意の文字(文字数関係なし、空値も含む) #:任意の数字(1文字)
[文字リスト] :[ ]内に指定した文字の中の任意の1文字。[ !文字リスト]とすると「含まない」になります。
(注意)文字リストは一文字ずつですのでご注意ください。"*[福岡]*"とした場合、「"福"または"岡"が含まれ、その前後は空値を含め何でも良い」という解釈になります。この場合、"福岡"だけでなく、"福島"、"福井"、"岡山"、"静岡"もTrueとなります。
パターン(=変数myStr)をいろいろ変えて、下記コードを実行した際の結果を表に示します。
1 2 3 4 |
'A列には、各都道府県名が記入されているものとします。 If Cells(i, 1).Value Like myStr Then Debug.Print Cells(i, 1).Value End If |
変数myStr | 出力される県名 | 補足 |
"?[広島]" | 福島 広島 徳島 | ? +「広 or 島」 |
"[!福]*島" | 広島 徳島 鹿児島 | 「福」以外 + * +「島」 |
"?[神奈川]" | 石川 香川 |
? + 「神 or 奈 or 川」 ※2文字なので神奈川はFalse |
"[神奈川]*" | 神奈川 奈良 | 「神 or 奈 or 川」+ * |