コード内のSelect Case文では大文字と小文字を区別しないと考えがちですが、実際には**Option Compareステートメント**の設定によって挙動が異なります。
例えば、コードで"red"を"Red"と同じとみなされない場合、考えられる原因について説明します。
設定を変更する方法
モジュールの先頭に設定を追加または変更
- モジュールの先頭に以下のように記述します。
【Binaryモードを明示的に指定】
Option Compare Binary
【Textモードに変更】
Option Compare Text
BinaryモードとTextモードの違い
| モード | 説明 |
| Option Compare Binary (デフォルト) | 文字列をバイナリ(文字コードの順)で比較します。大文字と小文字は区別されます。例: "A" ≠ "a" |
| Option Compare Text | 文字列をテキストとして比較します。大文字と小文字は区別されません。例: "A" = "a" |
大文字と小文字が区別される主な原因
Option Compare Binaryが設定されている
VBAでは、モジュールの先頭にOption Compareステートメントを指定することで、文字列の比較方法を制御できます。
Option Compare Binary(デフォルト設定)
文字列の比較で大文字と小文字を区別します。Option Compare Text
文字列の比較で大文字と小文字を区別しません。
コードのモジュール先頭に明示的にOption Compare Binaryが指定されている、または何も指定していない場合、VBAはデフォルトでBinaryモードになります。このため、"red"と"Red"は異なる文字列とみなされます。
Option Compare Textを使用する
モジュールの先頭にOption Compare Textを追加することで、大文字と小文字を区別せずに文字列を比較するようにできます。
Option Compare Text
Sub CaseInsensitiveComparison()
Dim color As String
color = "red"
Select Case color
Case "Red"
MsgBox "色は赤です。"
Case Else
MsgBox "色が不明です。"
End Select
End Sub
【結果】
color = "red"であっても"Red"と同じとみなされ、「色は赤です。」と表示されます。
注意点
- 設定の影響範囲
Option Compareはモジュール単位でのみ影響を及ぼします。他のモジュールには影響しません。- 例えば、
Module1でOption Compare Textを設定していても、Module2には影響しません。
- 既存コードへの影響
- 既存コードの挙動が変わる可能性があるため、
Option Compareを変更する際は、全体のコードを確認することをお勧めします。
- 既存コードの挙動が変わる可能性があるため、
- 動的に変更は不可
Option Compareは、コードの実行中に変更することはできません。モジュールの先頭で設定を行う必要があります。