動作確認: 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 CaseはElseIfよりすっきりしますが、業務ルールが変わるたびにテスト・デバッグ・更新が必要なコードであることに変わりはありません。ExcelMaster Agent は、ルールそのものを操作画面にします——「A列を区分けして。100未満は割引なし、100〜499は5%、500以上は10%」——範囲も境界値も含めてロジックを生成します。無料で試す →
関連ガイド
- Excel VBAのIf Then Else文 — 6つの実例
- Excel VBA Forループ — 8つの実例
- Excel VBA Whileループ — While・Do While・Do Untilの違い
よくある質問
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より速い? わずかに速いです。判定式が一度しか評価されないためです。ただし本当の利点は速度ではなく、読みやすさと保守性です。
