🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel VBA Select Case — 6つの実例(範囲・Is・複数の値)

|

Excel VBA Select Case — 6つの実例(範囲・Is・複数の値)

動作確認: Excel 365 v2509 · Excel 2021 · Excel 2019 · 最終確認 2026-06-05

要点Select Caseは、1つの変数を多くの候補値と照合します——ElseIfを積み重ねるより、ずっとすっきりします。コピーして調整してください。

Sub 評価する()
    Dim score As Long
    score = Range("A1").Value

    Select Case score
        Case Is >= 90:  Range("B1").Value = "A"
        Case 75 To 89:  Range("B1").Value = "B"
        Case 60 To 74:  Range("B1").Value = "C"
        Case Else:      Range("B1").Value = "不合格"
    End Select
End Sub

4行のElseIfに比べて、どれだけ読みやすいか分かるはずです。本ガイドではあらゆる照合方法を扱います——完全一致、リスト、範囲、比較、そしてSelect Case Trueという切り札です。

Select CaseがElseIfの壁に勝る理由

同じ変数を複数の値と照合するとき、ElseIfはすぐに騒がしくなります。Select Caseは変数名を一度だけ書き、候補を並べ、最初の一致で止まります——読みやすく、拡張しやすく、わずかに速い。

仕組み

VBAは判定式を一度だけ評価し、各Caseを上から下へ調べます。最初に一致したものが勝ち——残りのCaseは飛ばされます。Case Elseは、どれにも一致しなかったものを受け止めます(必ず最後に置く)。

例1 — 完全一致とカンマ区切りのリスト

1つのCaseに、カンマで区切った複数の値を入れられます。

Sub 国を分類()
    Dim country As String
    country = Range("A2").Value

    Select Case country
        Case "フランス", "ドイツ", "イタリア", "スペイン"
            Range("B2").Value = "ヨーロッパ"
        Case "日本", "韓国", "中国"
            Range("B2").Value = "アジア"
        Case Else
            Range("B2").Value = "その他"
    End Select
End Sub

例2 — Toによる数値範囲

Toは両端を含む範囲を表します——段階や区分にぴったりです。

Select Case 注文額
    Case 0 To 99.99:      割引 = 0
    Case 100 To 499.99:   割引 = 0.05
    Case 500 To 999.99:   割引 = 0.1
    Case Else:            割引 = 0.15
End Select

例3 — Isと比較演算子

範囲では表せないとき、Isを使えば><>=<=<>が使えます。

Select Case temperature
    Case Is < 0:    status = "氷点下"
    Case Is <= 15:  status = "寒い"
    Case Is <= 25:  status = "穏やか"
    Case Else:      status = "暑い"
End Select

順序が重要です。最初の一致が勝つので、最も狭い境界から順に並べてください。

例4 — リスト・範囲・Isを1つのブロックで混在

Select Case score
    Case 0, 1, 2:        rating = "不良"        ' リスト
    Case 3 To 6:         rating = "普通"        ' 範囲
    Case Is >= 7:        rating = "良好"        ' 比較
    Case Else:           rating = "評価なし"
End Select

3つの照合方法は自由に共存できます。この柔軟さこそ、ElseIfの連鎖が読めなくなる場面でもSelect Caseが破綻しない理由です。

例5 — Select Case True の裏技

別々の変数を条件にしたいけれど、Caseのすっきりした見た目は保ちたい? 判定式をTrueにします。

Select Case True
    Case age < 18 And hasGuardian:    fare = "こども"
    Case age >= 65:                   fare = "シニア"
    Case isStudent And age < 26:      fare = "学生"
    Case Else:                        fare = "おとな"
End Select

Caseが完全な真偽式になりました。これは、複数変数のロジックを読みやすく保つVBAの定石です——Select Caseが単一変数の枠を超える唯一の場面です。

例6 — 安全網としてのCase Else

想定外を受け止めるためだけでも、Case Elseは必ず入れましょう。

Select Case Weekday(Date)
    Case vbMonday To vbFriday:  MsgBox "平日"
    Case vbSaturday, vbSunday:  MsgBox "週末"
    Case Else:                  MsgBox "想定外の日付値"   ' 通常は来ないはず
End Select

「決して実行されないはず」のCase Elseこそ、黙って何もしない代わりに、予期しないデータを捕まえる仕掛けです。

Select Case と If/ElseIf の使い分け

状況 使うもの
1つの変数を3つ以上の値で判定 Select Case
値の範囲(1〜10、11〜20…) Select Case ... To
別々の変数を条件にする If...ElseIf または Select Case True
結果が1〜2通りだけ If...Else

目安: 同じ変数で結果が多い → Select Case。別々の変数で結果が少ない → If

よくあるエラー(と対処)

2つのCaseが重なり、誤った方が動く — 最初の一致が勝つことを思い出してください。Case Is < 50より前にCase Is < 100を置くと、50未満の値は2つ目のCaseに届きません。狭い順から並べます。

Case x > 5が何もしない — むき出しの比較は書けません。Case Is > 5とします。比較にはIsが必須です。

文字列照合が大文字小文字で失敗するSelect Caseは既定で大文字小文字を区別します。Option Compare Textをモジュール冒頭に置くか、Select Case LCase(country)で正規化します。

分岐ロジックの手入れはもう終わり

Select CaseElseIfよりすっきりしますが、業務ルールが変わるたびにテスト・デバッグ・更新が必要なコードであることに変わりはありません。ExcelMaster Agent は、ルールそのものを操作画面にします——「A列を区分けして。100未満は割引なし、100〜499は5%、500以上は10%」——範囲も境界値も含めてロジックを生成します。無料で試す →

関連ガイド

よくある質問

VBAのSelect Caseで値の範囲を判定できますか? できます——Case 1 To 10は1から10まで(両端含む)に一致します。範囲・リスト・Is比較を同じブロックで組み合わせられます。

1つのCaseで複数の値を判定するには? カンマで区切ります。Case "A", "B", "C"は3つのいずれかに一致します。範囲や比較もリストに混ぜられます(Case 1, 2, 5 To 9)。

IfではなくSelect Caseを使うべきなのはいつ? 同じ変数を3つ以上の値で判定するときです。結果が1〜2通り、または別々の変数を条件にするならIf...ElseIfで十分です。

Select CaseはElseIfより速い? わずかに速いです。判定式が一度しか評価されないためです。ただし本当の利点は速度ではなく、読みやすさと保守性です。