MENU

【初心者向け】Option Compareの設定が混在しているときの注意点とは?VBAプロジェクト全体での落とし穴!

A子さん

「この前作ったコードでは”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 はモジュールごとに動作するため、混在に注意!

プロジェクトで一貫性がないとバグや混乱の原因になる

必ずチームで方針を決めて、意図して使うことが重要

関連記事リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

かもろぐ屋です
Microsoftが大好きな社内SEです
転職経験あり・内定辞退経験あり

なお絶賛婚活中

コメント

コメントする

CAPTCHA


目次