A子さん「文字列の条件分岐に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()で統一する
入力や外部データが関わる場合は、意識的な変換が大事

コメント