VBAで自動化 VBA一覧 ファイル・印刷操作

【VBA】Option Compare 【Binary・Text】ステートメントの設定方法

コード内の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"と同じとみなされ、「色は赤です。」と表示されます。

注意点

  1. 設定の影響範囲
    • Option Compareはモジュール単位でのみ影響を及ぼします。他のモジュールには影響しません。
    • 例えば、Module1Option Compare Textを設定していても、Module2には影響しません。
  2. 既存コードへの影響
    • 既存コードの挙動が変わる可能性があるため、Option Compareを変更する際は、全体のコードを確認することをお勧めします。
  3. 動的に変更は不可
    • Option Compareは、コードの実行中に変更することはできません。モジュールの先頭で設定を行う必要があります。

    -VBAで自動化, VBA一覧, ファイル・印刷操作