MENU

【初心者向け】VBAのSelect Caseで文字列を使う時の注意点|大文字・小文字は区別される?

A子さん

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

先輩

そう、VBAのSelect Caseは文字列の大小文字を区別します。
この記事では、文字列を安全に扱う方法と注意点を解説します!

結論:Select Caseは大文字・小文字を区別する!

"Apple""apple"別の値として認識されます。

Option CompareLCase/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つ:

  1. Option Compare Text を使う
  2. LCase()UCase()で統一する

入力や外部データが関わる場合は、意識的な変換が大事

関連記事リンク

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

この記事を書いた人

コメント

コメントする

CAPTCHA


目次