文字列を比較する際、通常は大/小文字や全/半角は区別されます。
If "A" = "a" Then MsgBox "ここは実行されません。" End If
この設定を変更し、大/小文字、全/半角を同一とみなす設定にするには、
Option Compare ステートメントを使用します。
サンプルコード
Option Explicit ' 文字列比較を大/小文字、全/半角区別なしに変更 Option Compare Text Sub 文字列比較テスト() If "APPLE" = "apple" Then MsgBox "一致" End If End Sub
解説
Option Compare ステートメントを使用することで、
文字列比較の設定をバイナリ↔テキストで切り替えできます。
バイナリ比較では「大文字/小文字、全角/半角」が区別され、
テキスト比較ではこれらが区別されません。
通常はバイナリモードになっていますので、
事実上はテキストモードに切り替えるときに使用するステートメントですね。
一応設定できる値が3つあり、
Option Compare Text Option Compare Binary Option Compare Database
この3種のステートメント実行方法がありますが、
Binaryは元の設定であるため指定する意味は特になく、
DataBaseはAccess専用の設定でExcelVBAではエラーになります。
よって実際はTextの時のみ使用するステートメントと思ってOKです。
比較演算子「<」「>」を使用したときの挙動
文字列の比較は「=」だけでなく、
比較演算子「<」「>」も使用することができます。
文字コード上でどちらが大きいか(並び替えで上にくる方が小)を比較でき、
以下のようなコードで判定を行うことができます。
If "A" < "B" Then MsgBox "ここは実行されます。" End If
この比較にもOption Compareステートメントは反映され、
以下のコードの判定結果が変わります。
Option Explicit ' 文字列比較を大/小文字、全/半角区別なしに変更 Option Compare Text Sub 文字列比較テスト() If "a" < "B" Then MsgBox "Option Compare Textでは実行されます。" End If End Sub
aとBの大小がちょっと複雑ですが、アルファベットだけで概要を説明しますと、
| バイナリ | A < B < C < … < Z < a < b < … |
|---|---|
| テキスト | A = a < B = b < C = c < … |
このような判定になっています。
大文字小文字を区別せずに文字列をソートする関数などを作る際は、
専用のモジュールを作りこの設定を使用してください。
特定のコードでのみテキスト比較を行う - StrComp関数
今回の設定は「モジュール全体」に反映されてしまうため、
他のコードに影響しては困る場合は使用できません。
ある特定の行の比較でのみテキスト比較を行いたい場合は、
StrComp関数を使用します。
Sub 文字列比較テスト() If StrComp("APPLE", "apple", vbTextCompare) = 0 Then MsgBox "一致" End If End Sub
StrComp関数の第3引数に「vbTextCompare」を指定することで、
テキスト比較による文字列判定を行うことができます。
結果値は以下の3種(例外を入れて4種)になっていますので、
一致判定は上記コードの通り「=0」で行うことになります。
| 比較結果 | 文字列の判定 |
|---|---|
| -1 | 文字列1<文字列2 |
| 0 | 文字列1=文字列2 |
| 1 | 文字列1>文字列2 |
| Null | いずれかの文字列がNull |
この関数を使用すれば、特定の行のみテキスト比較を行うことができます。
モジュール全体に設定できない場合はこちらを使用してください。
詳しくはこちらのページをどうぞ。
www.limecode.jp