
「文字列の条件分岐にSelect Caseを使ったら、
“Apple”と“apple”が別扱いになっちゃってて焦った…!」



そう、VBAのSelect Caseは文字列の大小文字を区別します。
この記事では、文字列を安全に扱う方法と注意点を解説します!
結論:Select Caseは大文字・小文字を区別する!
"Apple"
と "apple"
は 別の値として認識されます。
Option Compare
や LCase/UCase
を使って 対策が可能!
目次
文字列の条件分岐で起きがちなトラブル
以下のように書くと、見た目では同じでも判定されません。
Dim fruit As String fruit = "apple" Select Case fruit Case "Apple" MsgBox "りんごです" Case Else MsgBox "りんごではありません" End Select
上記の場合、「りんごではありません」と表示されます。
理由は、「apple
」と「Apple
」が違う文字列として扱われているからです。
Select Caseは大文字・小文字を区別する
VBAはデフォルトでは大文字・小文字を区別します。
"Apple" ≠ "apple" "Cat" ≠ "cat"
✅ この仕様はIf
文でも同様です。
解決策①:Option Compare Text を使う
ファイルの一番上にこの1行を追加します。
Option Compare Text
すると、文字列の比較が大文字・小文字を無視するモードになります。
Option Compare Text Dim fruit As String fruit = "apple" Select Case fruit Case "Apple" MsgBox "マッチします!" End Select
✅ 注意点
- モジュールごとに効く設定です
- 同一ファイル内でも、他のモジュールには影響しません
解決策②:LCase または UCase で変換して比較する
Dim fruit As String fruit = "Apple" Select Case LCase(fruit) Case "apple" MsgBox "マッチします!" End Select
LCase()
→ 小文字に変換UCase()
→ 大文字に変換
文字列を比較前に一括変換することで、ケース違いを吸収できます。
実用コードサンプル
【例1】ユーザー入力による判定
Dim inputVal As String inputVal = InputBox("果物の名前を入力してください") Select Case LCase(inputVal) Case "apple", "orange", "banana" MsgBox "果物です" Case Else MsgBox "知らない果物です" End Select
【例2】Option Compare Textを使う場合
Option Compare Text Sub TestCompare() Dim ans As String ans = "Yes" Select Case ans Case "yes" MsgBox "一致しました" Case Else MsgBox "一致しません" End Select End Sub
まとめ
Select Caseは文字列の大文字・小文字を区別する(デフォルトでは)
対処法は以下の2つ:
Option Compare Text
を使うLCase()
やUCase()
で統一する
入力や外部データが関わる場合は、意識的な変換が大事
コメント