
「この前作ったコードでは”Apple”と”apple”が同じって判定されたのに、
今回は違うって言われた…え、なんで!?なんかの呪い?」



そんなあなたに忍び寄るのが、Option Compareの混在問題。
これは、VBAを使っていると見落としがちな落とし穴のひとつです。
結論:モジュールごとにOption Compareが効く!統一しないと挙動がバラバラに!
目次
Option Compareはモジュール単位で動作
まず基本ですが、Option Compareは「そのモジュールにだけ効く」設定です。
つまり、以下のようになります。
' Module1 Option Compare Text Sub Compare1() Debug.Print "Apple" = "apple" ' → True End Sub
' Module2(Option Compareなし → Binary扱い) Sub Compare2() Debug.Print "Apple" = "apple" ' → False End Sub
→ Compare1とCompare2で結果が違う!
なぜ混在すると困るのか?
- 一部のモジュールだけ
Text
にしていても、他ではBinary
(デフォルト)になる - 文字列比較をしている処理が期待通りに動かない
- バグの原因に気付きにくい
特に注意すべきは、複数人で開発している時や、過去のコードを流用した時です。
よくある失敗パターン
✅ 名前やコードでのフィルター処理
If Cells(i, 1).Value = "apple" Then
→ モジュールによって“Apple”をヒットするかどうかが変わる
✅ 配列の検索や辞書のキー比較
If dict.Exists("apple") Then
→ 登録時が「Apple」、検索が「apple」だと、TextじゃないとFalseになる
プロジェクト全体で統一するコツ
方法 | メリット | 注意点 |
---|---|---|
全モジュールにOption Compare Text を書く | 確実に統一できる | 書き忘れに注意 |
コーディング規約に明記 | チームで共有しやすい | 教育・レビューが必要 |
自動生成テンプレートで管理 | 書き漏れ防止になる | 初期設定が必要 |
ワンポイント:文字列比較は常に意識すること
文字列の比較処理が厳密なものか、人間の感覚に寄せたいかで使い分けましょう。
どちらが「正解」ではなく、「意図と一致しているか」が大切です。
まとめ
Option Compare
はモジュールごとに動作するため、混在に注意!
プロジェクトで一貫性がないとバグや混乱の原因になる
必ずチームで方針を決めて、意図して使うことが重要
コメント