【2026年7月最新】VBA Select Caseで複数条件分岐を完全マスター|Or・To・Is・Likeの使い方を業務で徹底解説

【2026年7月最新】VBA Select Caseで複数条件分岐を完全マスター|Or・To・Is・Likeの使い方を業務で徹底解説

「VBAでIf文を何重にも書いてコードが読みにくくなってしまった」「Select Caseは聞いたことがあるが、OrやToをどう使えばいいか分からない」——Excelマクロを書き続けると、こうした条件分岐の壁にぶつかります。Select Caseは、複数の条件分岐をシンプルで読みやすい構造で書けるVBAの強力な構文です。特に「この値が何番のコードか」「この数値はどのランクか」「このセルの内容はどのカテゴリか」といった多分岐処理で、If文よりも圧倒的にスッキリしたコードになります。

この記事では、VBAのSelect Case文を完全に解説します。基本的な構文の書き方から、カンマを使ったOR条件・Toキーワードでの範囲指定・Is演算子での比較・Likeによるパターンマッチング・Case Elseのデフォルト処理・業務での実践活用まで、コード例とともに体系的に整理していきます。

代表菅澤 代表菅澤
弊社では受注管理・経費分類・ステータス振り分けなど、値に応じて処理を分岐するVBAマクロを多数使っています。If文を重ねると30行になる処理が、Select Caseで10行に収まる——この可読性の差が、後から保守するときのコストを大きく変えます。
AI鬼管理山崎 AI鬼管理山崎
特にToキーワードの範囲指定とIsの比較演算子は、点数評価・年齢区分・売上ランク分類など業務マクロで頻出のパターンです。これを覚えると条件分岐の表現力が格段に上がります。

この記事を最後まで読むと、次のことが分かります。

✔️If文とSelect Caseの使い分け:どちらを選ぶべきかの判断基準
✔️基本構文:Case・Case Else・End Selectの書き方
✔️カンマ(OR条件):Case "A", "B", "C"で複数の値を一つのCaseにまとめる方法
✔️Toキーワード:Case 1 To 10 で数値・文字列の範囲を指定する方法
✔️Is演算子:Case Is > 100 など比較演算子を使った条件の書き方
✔️Likeパターン:ワイルドカードを使った部分一致・前方一致の指定方法
✔️業務での実践パターン:ステータス分類・スコアリング・カテゴリ振り分けのコード例
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年7月最新】VBA Select Caseで複数条件分岐を完全マスター|Or・To・Is・Likeの使い方を業務で徹底解説
VBAのSelect Case文を完全解説。基本構文からカンマ(OR)・Toキーワード・Is演算子・Likeパターンマッチングまで、If文との使い分け・業務活用・よくあるエラーをコード例付きで解説します。

01 Select CaseとIf文の使い分け どちらを選ぶべきかの判断基準と、Select Caseが圧倒的に有利な場面

VBAの条件分岐構文はIf文とSelect Caseの2種類があります。どちらでも同じ処理を書けますが、「1つの変数・式の値によって複数の処理を切り替えたい」ケースでは、Select Caseの方がコードが読みやすく、保守も容易になります。一方、「複数の条件が複雑に絡み合う場合」「同じ変数でない異なる条件を組み合わせる場合」はIf文が適しています。

観点If文Select Case
適している場面複数の異なる変数・複合条件・範囲の広い条件1つの変数・式の値で分岐する多分岐処理
可読性条件が多いと読みにくい(ElseIfが増える)条件が多くても縦に並ぶため読みやすい
保守性条件追加時にElseIfを挿入し直す必要がある新しいCaseを追加するだけでよい
パフォーマンス上から順に評価(条件が後ろほど遅い)式を1回評価して分岐(効率的)
柔軟性任意の条件式が書ける(高い)1つの式との比較のみ(低い)

実務での判断基準を一言で言うと、「比較対象が1つの変数・式で、分岐が3つ以上あるか」でSelect Caseを選びます。たとえば「status変数の値が"未処理"・"処理中"・"完了"・"キャンセル"のどれかによって処理を変える」ような場合は、If/ElseIfを4つ書くよりSelect Caseで書く方が圧倒的にスッキリします。逆に「AがTrueかつBがFalseの場合」のような複合条件はIf文一択です。

📚 用語解説

Select Case文:VBAの多分岐制御構文。1つの変数や式の値を評価し、一致するCaseのブロックを実行します。「Select Case 式」で始まり、複数の「Case 値:処理」ブロックが続き、「End Select」で終わります。Javaのswitch文・Pythonのmatch文に相当します。

代表菅澤 代表菅澤
社内のExcelマクロをコードレビューすると、If文を5〜8重に重ねた「条件分岐スパゲッティ」を見かけることがあります。その多くはSelect Caseで書き直せる。リファクタリングでコードが半分以下の行数になることも珍しくありません。
比較対象が
1変数・1式?

Yes→Select Case
No→If文
分岐は
3つ以上?

Yes→Select Case優位
No→If文でも同程度
値・範囲の
比較が主体?

Yes→Select Case
複合条件→If文
Select Case
or If文
を選択

02 Select Caseの基本構文 Case・Case Else・End Selectの書き方と実行の流れ

Select Caseの基本構文は「Select Case 式」で始まり、複数の「Case 値」ブロックが続き、「End Select」で閉じます。VBAはSelect Caseブロックを上から順に評価し、最初に条件が一致したCaseのブロックを実行してEnd Selectに進みます。一致するCaseが1つも見つからない場合は、「Case Else」ブロックが実行されます。

' Select Caseの基本構文
Sub SampleSelectCase()
    Dim status As String
    status = Cells(2, 1).Value  ' A2セルの値を取得

    Select Case status
        Case "未処理"
            Cells(2, 2).Value = "要対応"
            Cells(2, 2).Interior.Color = RGB(255, 200, 200)  ' 赤背景

        Case "処理中"
            Cells(2, 2).Value = "進行中"
            Cells(2, 2).Interior.Color = RGB(255, 255, 200)  ' 黄背景

        Case "完了"
            Cells(2, 2).Value = "終了"
            Cells(2, 2).Interior.Color = RGB(200, 255, 200)  ' 緑背景

        Case Else
            ' 上記以外の値
            Cells(2, 2).Value = "不明なステータス"
            Cells(2, 2).Interior.Color = RGB(220, 220, 220)  ' グレー背景
    End Select
End Sub

2-1. 実行の流れを理解する

Select Caseは「式を1回評価→上から順にCaseと比較→最初に一致したCaseのブロックを実行→End Selectへジャンプ」という流れで動きます。JavaやCのswitch文にあるような「breakを忘れると次のCaseへ落ちる(フォールスルー)」現象はVBAのSelect Caseにはありません。VBAでは1つのCaseに一致すると自動的にそのブロックだけが実行され、次のCaseには移りません。複数のCaseに同じ処理を割り当てたい場合は、後述するカンマ(OR条件)で複数値を1つのCaseにまとめます。

' Case Elseがない場合の動作確認
Sub TestNoElse()
    Dim score As Integer
    score = 75

    Select Case score
        Case 90 To 100
            MsgBox "優"
        Case 70 To 89
            MsgBox "良"   ' ← これが実行される(scoreが75のため)
        Case 60 To 69
            MsgBox "可"
        ' Case Elseなし → 60未満の場合は何も起きない
    End Select

    ' フォールスルーなし:上記の"良"だけが表示される
    MsgBox "処理完了"  ' ← このMsgBoxは必ず実行される
End Sub
💡 Case Elseは省略可能だが書くことを推奨

どのCaseにも一致しない場合に何もしなくていいケースではCase Elseを省略できます。ただし「想定外の値が来たときに気づけない」リスクがあります。業務マクロでは、Case Else内にMsgBoxでエラーメッセージを出す、またはログを書き出す処理を入れておくと、データの異常に早期に気づけます。

AI鬼管理山崎 AI鬼管理山崎
「Case Elseがないと何も起きない」という挙動を理解していないと、「なぜかセルが更新されない」という原因不明のバグに悩まされます。まず想定値をCase Elseで確認することをお勧めします。

03 カンマで複数値(OR条件)を指定する 複数の値を1つのCaseにまとめるシンプルな書き方

1つのCaseブロックで複数の値のどれかに一致した場合に同じ処理を実行したいとき、値をカンマで区切って並べます。「Case "A", "B", "C"」と書くと、値がA・B・Cのどれかに一致すれば同じCaseブロックが実行されます。If文で「If x = "A" Or x = "B" Or x = "C"」と書くのと同じ意味で、Select Caseのほうが格段に読みやすくなります。

' カンマでOR条件を指定する例
Sub CategorizeByDepartment()
    Dim dept As String
    dept = Cells(ActiveCell.Row, 3).Value  ' C列の部署名

    Select Case dept
        Case "営業部", "営業1課", "営業2課", "営業企画室"
            ' 営業系は全て同じ処理
            Cells(ActiveCell.Row, 4).Value = "営業グループ"

        Case "経理部", "財務部", "会計課"
            ' 経理・財務系
            Cells(ActiveCell.Row, 4).Value = "財務グループ"

        Case "総務部", "人事部", "法務部"
            ' バックオフィス系
            Cells(ActiveCell.Row, 4).Value = "管理グループ"

        Case "開発部", "IT部", "システム部"
            ' 技術系
            Cells(ActiveCell.Row, 4).Value = "技術グループ"

        Case Else
            Cells(ActiveCell.Row, 4).Value = "その他"
    End Select
End Sub

3-1. 数値・日付のOR条件

カンマ区切りのOR条件は文字列だけでなく、数値・日付にも使えます。「Case 1, 3, 5, 7, 9, 11」のように奇数かどうかを判定したり、「Case #2024/1/1#, #2024/7/1#」のように特定の日付を一括指定したりできます。業務では「特定の月・曜日・コードの集合」に対して同じ処理を適用したいケースが多く、このパターンが重宝します。

' 数値のOR条件とビジネスロジック
Sub CalcTax()
    Dim categoryCode As Integer
    categoryCode = Cells(ActiveCell.Row, 2).Value  ' 商品カテゴリコード

    Dim taxRate As Double
    Select Case categoryCode
        Case 1, 2, 3  ' 食料品(軽減税率)
            taxRate = 0.08

        Case 4, 5      ' 日用品(標準)
            taxRate = 0.10

        Case 6, 7, 8   ' 贅沢品(標準)
            taxRate = 0.10

        Case Else
            taxRate = 0.10  ' デフォルト
    End Select

    Cells(ActiveCell.Row, 5).Value = Cells(ActiveCell.Row, 3).Value * taxRate
End Sub
代表菅澤 代表菅澤
「OR条件で複数の値をまとめる」パターンは、コード体系の分類・グルーピング処理で最もよく使います。弊社の経費分類マクロでは、30種類以上の勘定科目コードを10のグループに振り分けるのにこのパターンを多用しています。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 Toキーワードで範囲指定する 数値・文字列の連続範囲を簡潔に指定する方法

Toキーワードを使うと、「〇〇以上△△以下」という範囲条件をSelect Caseで簡潔に書けます。「Case 1 To 10」で1〜10の整数すべてにマッチする条件になります。If文で「If x >= 1 And x <= 10 Then」と書くのと同じ意味ですが、Select CaseのToを使う方が格段に読みやすく、複数の範囲をCase-Caseで並べても整然と見えます。

' Toキーワードで範囲指定する例
Sub ScoreToGrade()
    Dim score As Integer
    score = Cells(2, 2).Value  ' B2の点数

    Dim grade As String
    Select Case score
        Case 90 To 100
            grade = "S(優秀)"
        Case 80 To 89
            grade = "A(優)"
        Case 70 To 79
            grade = "B(良)"
        Case 60 To 69
            grade = "C(可)"
        Case 0 To 59
            grade = "D(不可)"
        Case Else
            grade = "入力エラー(0〜100の範囲外)"
    End Select

    Cells(2, 3).Value = grade
End Sub

📚 用語解説

Toキーワード(Select Case内):Select Case文のCaseで「最小値 To 最大値」と書くと、その範囲内の全ての値にマッチします。Case 1 To 10は「1以上10以下」、Case "A" To "E"は辞書順でA〜Eの文字列にマッチします。範囲は「最小値 To 最大値」の順で書く必要があり、逆に書くと正しく動作しません(Case 10 To 1はどの値にも一致しない)。

4-1. 文字列の範囲指定

Toキーワードは文字列にも使えます。「Case "A" To "M"」と書くと、辞書順でA〜Mの範囲にある文字列(1文字の場合)にマッチします。都道府県コード・都道府県名・アルファベット分類など、文字列の辞書順で処理を分岐したい場合に使えます。ただし文字列範囲の比較はバイナリ比較(大文字小文字の区別あり)で行われるため、大文字・小文字・全角・半角が混在するデータでは注意が必要です。

' 都道府県コードの地域分類(To範囲指定)
Sub ClassifyByRegion()
    Dim prefCode As Integer
    prefCode = Cells(ActiveCell.Row, 1).Value  ' 都道府県コード(1〜47)

    Dim region As String
    Select Case prefCode
        Case 1          ' 北海道
            region = "北海道"
        Case 2 To 7     ' 青森〜福島
            region = "東北"
        Case 8 To 14    ' 茨城〜神奈川
            region = "関東"
        Case 15 To 23   ' 新潟〜愛知
            region = "中部"
        Case 24 To 30   ' 三重〜兵庫(含む大阪、京都)
            region = "近畿"
        Case 31 To 35   ' 鳥取〜山口
            region = "中国"
        Case 36 To 39   ' 徳島〜高知
            region = "四国"
        Case 40 To 47   ' 福岡〜沖縄
            region = "九州・沖縄"
        Case Else
            region = "コードエラー"
    End Select

    Cells(ActiveCell.Row, 2).Value = region
End Sub
💡 Toと同じCaseにカンマOR条件を混在させる

Case 1, 3 To 5, 7のように、カンマと Toを同一のCase内で組み合わせることができます。「1または3から5の範囲または7」という条件です。複雑に見えますが、カンマで区切られた各条件(1、3 To 5、7)がOR評価されると理解すれば分かりやすいです。

AI鬼管理山崎 AI鬼管理山崎
売上金額のランク分類・従業員の年次評価・試験スコアのグレード判定など、「数値の範囲で処理を変える」業務処理はToキーワードが最適です。If ElseIfを5〜10連ねるより、Select Case+Toの方が圧倒的にコードが短くなります。

05 Isで比較演算子(大小・不等号)を使う Case Is > 100 など比較演算子をSelect Caseに組み込む方法

Isキーワードを使うと、Select Case内で「>(大なり)」「<(小なり)」「>=(以上)」「<=(以下)」「<>(不等号)」などの比較演算子を使った条件が書けます。「Case Is > 100」で「値が100より大きい」場合にマッチする条件になります。Toキーワードが「A以上B以下」という両端指定に向いているのに対し、Isは「〇〇より大きい」「〇〇以上」のような片端指定に向いています。

' Isで比較演算子を使う例
Sub ClassifyAmount()
    Dim amount As Long
    amount = Cells(ActiveCell.Row, 3).Value  ' 金額

    Dim category As String
    Select Case amount
        Case Is >= 10000000  ' 1000万円以上
            category = "大口顧客"
        Case Is >= 1000000   ' 100万円以上(1000万未満)
            category = "優良顧客"
        Case Is >= 100000    ' 10万円以上(100万未満)
            category = "一般顧客"
        Case Is > 0          ' 0より大きい(10万未満)
            category = "小口顧客"
        Case Is = 0          ' ゼロ
            category = "取引なし"
        Case Is < 0          ' マイナス(返金等)
            category = "要確認"
    End Select

    Cells(ActiveCell.Row, 4).Value = category
End Sub

📚 用語解説

Isキーワード(Select Case内):Select Case文のCaseで「Is 比較演算子 値」と書くと、比較演算子(>, <, >=, <=, =, <>)を使った条件が指定できます。Is > 100は「100より大きい」、Is <= 50は「50以下」を意味します。複数のIsを組み合わせて上から順に評価されるため、「最大値から順に並べる」設計が一般的です。

5-1. IsとToの組み合わせ

IsとToは同一のSelect Case内で混在させることができます。IsとToをうまく組み合わせると、複雑な範囲条件も可読性高く書けます。たとえば「100未満・100〜999・1000〜9999・10000以上」のように境界条件を全て網羅したいときは、To(両端範囲)とIs(片端範囲)の組み合わせが最もスッキリした書き方になります。

' IsとToを組み合わせた例(在庫数による発注フラグ)
Sub SetOrderFlag()
    Dim stock As Integer
    stock = Cells(ActiveCell.Row, 4).Value  ' 在庫数

    Dim flag As String
    Select Case stock
        Case Is < 0              ' マイナス在庫(データ異常)
            flag = "データ確認要"
        Case 0                   ' 在庫ゼロ
            flag = "緊急発注"
        Case 1 To 10             ' 残りわずか
            flag = "要発注"
        Case 11 To 30            ' 少なめ
            flag = "注意"
        Case Is > 30             ' 十分な在庫
            flag = "問題なし"
    End Select

    Cells(ActiveCell.Row, 5).Value = flag
End Sub
✔️Case Is > 値:指定値より大きい
✔️Case Is >= 値:指定値以上
✔️Case Is < 値:指定値より小さい
✔️Case Is <= 値:指定値以下
✔️Case Is <> 値:指定値と等しくない(特定値を除外したい場合に使用)
✔️上からの評価順に注意:「Is >= 1000000」の前に「Is >= 10000000」を書かないと大口が一般と判定される
代表菅澤 代表菅澤
IsとToを組み合わせると、エクセルで業務的によく使う「ABCDランク分け」「数量区分け」「単価設定」のロジックが非常にキレイに書けます。読みやすいコードは引継ぎや保守でのミスも減らします。

06 Likeパターンマッチング(ワイルドカード) ワイルドカードを使った部分一致・前方一致の書き方

📚 用語解説

Select Case True(パターン):Select Caseの式に「True」を指定するテクニック。各CaseにBoolean式(真偽値を返す式)が書けるようになり、Like演算子を使ったパターンマッチング・複数変数の複合条件・AND/OR条件など、通常のSelect Caseでは書けない条件を実現できます。実質的にIf ElseIfチェーンと同じですが、Caseの縦並び構造を活かした可読性の高い書き方が可能です。

Select CaseのCase句ではLike演算子を直接使うことはできません。しかしVBAでは「Case Like パターン」の代わりに、If文的なLike評価をSelect Case内で実現するか、またはワイルドカードを使いたい場合はIf文を使う、という設計になります。ただし、VBA 7.x以降ではCase文にLike演算子を記述する方法が一般的で、「Case Is Like "パターン"」とは書けませんが「Like演算子をTrueと比較する」形でSelect Caseと組み合わせることは可能です。

より実践的には「Select Case True」というテクニックがあります。式に「True」を指定すると、各CaseにはBoolean式(真偽値を返す式)が書けます。これを利用してLikeを使ったパターンマッチングをSelect Case内に組み込めます。

' Select Case True + Likeのテクニック
Sub ClassifyEmailDomain()
    Dim email As String
    email = LCase(Cells(ActiveCell.Row, 2).Value)  ' 小文字に統一

    ' Select Case True で各CaseにBoolean式を書く
    Select Case True
        Case email Like "*@gmail.com"
            Cells(ActiveCell.Row, 3).Value = "Gmail"

        Case email Like "*@yahoo.co.jp", email Like "*@yahoo.com"
            Cells(ActiveCell.Row, 3).Value = "Yahoo"

        Case email Like "*@*.co.jp", email Like "*@*.jp"
            Cells(ActiveCell.Row, 3).Value = "国内法人"

        Case email Like "*@*"
            Cells(ActiveCell.Row, 3).Value = "その他"

        Case Else
            Cells(ActiveCell.Row, 3).Value = "メールアドレスではない"
    End Select
End Sub

📚 用語解説

ワイルドカード(VBA Like演算子):Like演算子で使える特殊文字。「*(アスタリスク)」は0文字以上の任意の文字列にマッチ("A*"はA始まりの全て)、「?(クエスチョン)」は1文字の任意の文字にマッチ("A?"はA+1文字)、「#」は1桁の数字にマッチ、「[A-Z]」は括弧内の任意の1文字にマッチします。全て大文字・小文字を区別するバイナリ比較で行われます(LCaseで統一することを推奨)。

6-1. Like演算子のワイルドカード一覧

ワイルドカード意味使用例マッチ例
*(アスタリスク)0文字以上の任意の文字列"株式会社*""株式会社GENAI"、"株式会社A"など
?(クエスチョン)1文字の任意の文字"AB?""ABC"、"ABD"など(3文字限定)
#(シャープ)0〜9の1桁の数字"###-####""123-4567"のような電話番号形式
[文字列]括弧内の任意の1文字"[AB]C""AC"または"BC"
[!文字列]括弧内以外の任意の1文字"[!AB]C"AでもBでもない文字+Cの2文字
' ワイルドカードの実践例
Sub ClassifyProductCode()
    Dim code As String
    code = UCase(Cells(ActiveCell.Row, 1).Value)  ' 大文字に統一

    ' Select Case True + Likeで商品コード分類
    Select Case True
        Case code Like "EL###-####"   ' ELで始まる電器製品コード形式
            Cells(ActiveCell.Row, 2).Value = "電器製品"

        Case code Like "FD[0-9][0-9]-*"  ' FD+2桁番号で始まる食品
            Cells(ActiveCell.Row, 2).Value = "食品"

        Case code Like "SV-*"          ' SVで始まるサービス
            Cells(ActiveCell.Row, 2).Value = "サービス"

        Case code Like "####"          ' 4桁数字のみ
            Cells(ActiveCell.Row, 2).Value = "旧コード体系"

        Case Else
            Cells(ActiveCell.Row, 2).Value = "不明コード"
    End Select
End Sub
AI鬼管理山崎 AI鬼管理山崎
Select Case Trueパターンは「複数の異なる条件を縦に並べて読みやすく書きたいが、比較対象が統一できない」ときの万能テクニックです。通常のIf ElseIfと機能的には同じですが、Caseの縦並びがコードを視覚的にスッキリさせます。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 Case Elseとネスト・複合テクニック デフォルト処理の設計とSelect Caseを組み合わせる高度な使い方

Case Elseブロックは、上記のどのCaseにも一致しなかったときに実行されます。「入力値の妥当性チェック」「想定外の値への対応」「デフォルト動作の定義」に使います。業務マクロでは「想定外のデータが来たときにSEデバッグ用のメッセージを出す」または「エラーログに記録する」といった処理をCase Elseに入れることで、データの異常を早期に検知できます。

' Case Elseを使った入力値の妥当性チェック
Sub ValidateInput()
    Dim inputVal As String
    inputVal = Cells(2, 1).Value

    Select Case inputVal
        Case "A", "B", "C", "D", "E"
            ' 正常値の処理
            Cells(2, 2).Value = "有効な評価値: " & inputVal
            Cells(2, 2).Interior.Color = RGB(200, 255, 200)

        Case ""
            ' 未入力
            Cells(2, 2).Value = "未入力です"
            Cells(2, 2).Interior.Color = RGB(255, 255, 200)

        Case Else
            ' 想定外の値
            Cells(2, 2).Value = "エラー: 無効な値「" & inputVal & "」が入力されました"
            Cells(2, 2).Interior.Color = RGB(255, 200, 200)
            ' デバッグ用ログ(Immediateウィンドウに出力)
            Debug.Print "想定外の値: " & inputVal & " (行: " & ActiveCell.Row & ")"
    End Select
End Sub

7-1. Select Caseのネスト(入れ子)

Select Case文の中に別のSelect Case文を入れる「ネスト(入れ子)」も可能です。たとえば「まず大分類を判定してから小分類を判定する」という2段階分類や、「地域で絞り込んでから更にランクで分岐する」のような複層分類に使います。ネストは2〜3段階までに留めるのが可読性の観点から推奨されます。

' 2段階のネストSelect Case
Sub TwoLevelClassify()
    Dim region As String
    Dim rank As Integer
    region = Cells(ActiveCell.Row, 1).Value  ' 地域
    rank = Cells(ActiveCell.Row, 2).Value    ' ランク(1〜5)

    Dim result As String
    Select Case region
        Case "関東"
            Select Case rank
                Case 5
                    result = "関東・プレミアム"
                Case 3 To 4
                    result = "関東・スタンダード"
                Case Else
                    result = "関東・エコノミー"
            End Select

        Case "関西"
            Select Case rank
                Case 5
                    result = "関西・プレミアム"
                Case 3 To 4
                    result = "関西・スタンダード"
                Case Else
                    result = "関西・エコノミー"
            End Select

        Case Else
            result = "その他地域"
    End Select

    Cells(ActiveCell.Row, 3).Value = result
End Sub
⚠️ 3段以上のネストは避けるべき

Select Caseのネストが3段以上になると、どのEndSelect・End SelectがどのSelectと対応しているか読み解くのが困難になります。3段以上になる場合は、処理をサブルーチン(Subプロシージャ)に切り出して、ネストを浅くする設計を検討してください。インデントを丁寧につけることで1〜2段なら読みやすさを維持できます。

08 業務での実践活用パターン ステータス管理・スコア評価・カテゴリ振り分けの業務マクロ例

ここまで学んだSelect Caseの各機能を組み合わせた、業務でそのまま使える実践パターンを紹介します。弊社(株式会社GENAI)の実際の業務自動化マクロを参考にした、現場で使えるコードスニペットです。

8-1. 受注ステータスの色分け(Or条件 + 色設定)

' 受注ステータスに応じたセル色分けとフラグ設定
Sub ColorByStatus()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    Dim r As Long
    For r = 2 To lastRow
        Dim status As String
        status = ws.Cells(r, 4).Value  ' D列:ステータス

        Select Case status
            Case "未対応", "未処理", "未確認"
                ws.Cells(r, 4).Interior.Color = RGB(255, 200, 200)  ' 赤
                ws.Cells(r, 5).Value = "要対応"

            Case "対応中", "処理中", "確認中"
                ws.Cells(r, 4).Interior.Color = RGB(255, 255, 200)  ' 黄
                ws.Cells(r, 5).Value = "進行中"

            Case "完了", "対応済", "解決済"
                ws.Cells(r, 4).Interior.Color = RGB(200, 255, 200)  ' 緑
                ws.Cells(r, 5).Value = "完了"

            Case "保留", "様子見", "一時停止"
                ws.Cells(r, 4).Interior.Color = RGB(200, 200, 255)  ' 青
                ws.Cells(r, 5).Value = "保留"

            Case "キャンセル", "取消"
                ws.Cells(r, 4).Interior.Color = RGB(220, 220, 220)  ' グレー
                ws.Cells(r, 5).Value = "終了"

            Case Else
                ws.Cells(r, 4).Interior.Color = RGB(255, 150, 150)  ' 濃い赤
                ws.Cells(r, 5).Value = "ステータス不明: " & status
        End Select
    Next r

    MsgBox "色分け処理完了(" & lastRow - 1 & "行)"
End Sub

8-2. 売上金額のランク分類(To + Is組み合わせ)

' 売上金額でランク判定して担当アクションを設定
Sub AssignRank()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    Dim r As Long
    For r = 2 To lastRow
        Dim amount As Long
        amount = ws.Cells(r, 3).Value  ' C列:売上金額

        Dim rank As String
        Dim action As String
        Select Case amount
            Case Is >= 5000000  ' 500万以上
                rank = "S"
                action = "営業部長対応・優先フォロー"

            Case 1000000 To 4999999  ' 100〜499万
                rank = "A"
                action = "担当営業・月次面談"

            Case 300000 To 999999   ' 30〜99万
                rank = "B"
                action = "担当営業・四半期面談"

            Case 1 To 299999        ' 1〜29万
                rank = "C"
                action = "メールフォロー"

            Case 0
                rank = "D"
                action = "休眠顧客・再アプローチ検討"

            Case Else  ' マイナス(返金等)
                rank = "-"
                action = "経理確認"
        End Select

        ws.Cells(r, 4).Value = rank
        ws.Cells(r, 5).Value = action
    Next r

    MsgBox "ランク分類完了(" & lastRow - 1 & "件)"
End Sub
代表菅澤 代表菅澤
この売上ランク分類マクロは弊社の営業管理で実際に使っているパターンとほぼ同じです。手動で1件ずつランクを判定していた作業が、マクロ1回実行で1000件を一括処理できるようになりました。判定基準が変わったときもSelect Caseの値を変えるだけです。
顧客リスト
読み込み

全件をループ
Select Case
条件判定

金額・ステータス
で分岐
ランク・
アクション設定

セルに値と
色を設定
一括出力
結果シートに
書き出し

09 よくある失敗とデバッグ方法 Select Caseで引っかかりやすいバグパターンと修正方法

Select Caseを使ったコードで発生しやすいバグのパターンをまとめます。エラーメッセージが出ずに「なぜか期待した処理が実行されない」というサイレントバグが多いため、デバッグに時間がかかりやすい領域です。

バグパターン原因対処法
Case Elseばかり実行されるデータの型・大文字小文字・全角半角がCaseの値と不一致Debug.Printで実際の値を確認、UCaseやTrimで正規化
ToキーワードのIsより大きい値が先に実行されるCaseの順番が上位ランクより先に低ランクが来ている大→小・高→低の順にCaseを並べる
コンパイルエラー:Caseの後ろがないEnd SelectとCase Elseの位置がずれているインデントを整えてSelect〜End Selectの対応確認
数値型とString型の不一致比較対象が数値なのにCase "1"(文字列)と書いたCaseの値を比較対象と同じ型で書く

9-1. 最頻出バグ:全角・半角・大文字・小文字の不一致

業務マクロでSelect Caseが期待通りに動かない原因の9割は「Caseの値とデータの表記ゆれ」です。たとえばCase "完了"と書いてセルに「完了」が入っていても、セルの値が全角スペース入り「完了 」だったり、半角カタカナだったりすると一致しません。LCase(小文字統一)・UCase(大文字統一)・Trim(前後スペース除去)の組み合わせでデータを正規化してからSelect Caseに渡すことで、この種のバグを防げます。

' データ正規化してからSelect Caseに渡す防御パターン
Sub SafeSelectCase()
    Dim rawValue As String
    rawValue = Cells(ActiveCell.Row, 1).Value

    ' 前後スペース除去 + 大文字統一で正規化
    Dim normalized As String
    normalized = UCase(Trim(rawValue))  ' 例:"  complete  " → "COMPLETE"

    Select Case normalized
        Case "COMPLETE", "COMPLETED", "完了"
            ' 複数の表記を一括カバー
            Cells(ActiveCell.Row, 2).Value = "完了"

        Case "PENDING", "保留"
            Cells(ActiveCell.Row, 2).Value = "保留"

        Case Else
            ' デバッグ用:実際の値を確認できる
            Debug.Print "未定義の値: [" & rawValue & "] → 正規化後: [" & normalized & "]"
            Cells(ActiveCell.Row, 2).Value = "不明: " & normalized
    End Select
End Sub
💡 Debug.Printで実際の値を確認するデバッグ方法

Select Caseがどのケースにも一致しない場合は、Debug.Print "値:[" & 変数 & "]" をSelect Caseの直前に追加して、VBEのイミディエイトウィンドウ(Ctrl+G)で実際の値を確認します。[値]のように括弧で囲んで出力すると、スペースや不可視文字の有無が分かります。

AI鬼管理山崎 AI鬼管理山崎
「Select Caseが全部Case Elseになる」という相談を受けたとき、原因の大半がTrimしていなかった(前後スペース含む)、または全角半角の混在でした。Debug.Printで実際の値を見るだけで即座に原因が分かります。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

10 Claude CodeでSelect Caseコードを自動生成 条件分岐の業務ロジックをAIに書かせる実践ガイド

Select Caseを使った条件分岐ロジックは、「どの値のときにどの処理をするか」という業務仕様が確定していれば、Claude Codeに自動生成させることができます。条件の数が多い(10種類以上)、ToやIsを組み合わせる、ネストが必要——こうした複雑なパターンも、業務要件を日本語で説明するだけで正確なVBAコードを生成してくれます。

代表菅澤 代表菅澤
弊社で50種類以上の商品コードを8つのカテゴリに分類するSelect Case文を作る必要があったとき、「コードA001〜A099は電器製品、B001〜B099は食品、...」という仕様一覧をそのままClaude Codeに渡したら、Toキーワードを使った最適なSelect Caseコードが数秒で生成されました。
✔️「どの値のときにどの処理をするか」の対応表(分類仕様)を文章や表で渡す
✔️数値範囲なのか特定値なのかパターンマッチなのか——条件の種類を説明する
✔️「ネストを2段以内で書いて」「Case Elseにエラーログを入れて」などの制約を伝える
✔️生成されたコードのコメントを読んでロジックを確認する
✔️動かない場合はエラーメッセージとコードをそのままClaudeに貼り付けて原因を聞く

非エンジニアの方がSelect Caseを使って業務マクロを作りたい場合、「どの値のときに何をしたいか」を整理した対応表(Excelや箇条書きでOK)を用意して、それをClaude Codeに渡すだけで実用的なVBAコードが生成できます。プログラミングの知識がなくても、業務の仕様を言語化できれば自動化が実現できます。弊社のAI鬼管理では、こうした業務VBA自動化の設計・実装支援も承っています。

AI鬼管理山崎 AI鬼管理山崎
Claude Codeは「このコードをIf文からSelect Caseにリファクタリングして」という依頼にも対応できます。既存のVBAコードを貼り付けて「読みやすく書き直して」と頼むだけで、Select Caseを使ったシンプルな形に変換してくれます。

11 まとめ VBA Select Caseを完全に使いこなすためのポイント整理

この記事では、VBAのSelect Case文を11のセクションで体系的に解説しました。基本構文からカンマOR条件・To範囲・Is演算子・Likeパターン・実践業務パターンまで、Select Caseの使い方を完全に整理しました。

✔️If文との使い分け:1変数・多分岐ならSelect Case、複合条件はIf文
✔️基本構文:Case・Case Else・End Selectの3要素でシンプルに書ける
✔️カンマ(OR条件):Case "A", "B", "C" で複数値を1ケースにまとめる
✔️Toキーワード:Case 1 To 10 で数値・文字列の範囲を指定する
✔️Is演算子:Case Is > 100 など比較演算子を使った片端指定
✔️Select Case True + Like:ワイルドカードパターンをCase内で使う高度テクニック
✔️防御的コーディング:Trim・UCase/LCaseで正規化してからSelect Caseに渡す

Select Caseをマスターすることで、業務Excelマクロの「条件分岐スパゲッティ」から解放されます。20〜30行のIf ElseIfチェーンが、Select Caseによって半分以下の行数でより読みやすいコードに変わります。ぜひ今日書く次のVBAから使ってみてください。

代表菅澤 代表菅澤
Select Caseを覚えると「このIf文が長くて読みにくいな」と感じる場面が見えるようになります。保守性の高いコードは、将来の自分や引継ぐメンバーへの贈り物です。

VBAによる業務自動化を、AI鬼管理が一緒に設計します

「Excelのマクロで業務を自動化したいが、Select Caseの条件分岐が複雑で書けない」「既存のIf文スパゲッティをSelect Caseでリファクタリングしたい」という方に向けて、弊社ではClaude Codeを活用したVBA業務自動化の設計・実装支援を行っています。

AI鬼管理山崎 AI鬼管理山崎
「どの条件のときに何をするか」という業務仕様が決まっていれば、VBAのコーディングはClaude Codeに任せられます。まずは無料相談で現状の業務フローをお聞かせください。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

よくある質問

Q. Select CaseとIf文はどちらを使えばいいですか?

A. 比較対象が1つの変数・式で、分岐の選択肢が3つ以上ある場合はSelect Caseを推奨します。「statusが"完了"・"処理中"・"未処理"のどれか」のような判定はSelect Caseが読みやすいです。「AがTrueかつBが100以上」のような複数変数の複合条件はIf文を使います。

Q. Select CaseでAnd条件(かつ)は使えますか?

A. 通常のSelect Case文でAndは使えません。「Case Is > 10 And Is < 20」のような書き方はできません。AND条件が必要な場合は、「Select Case True」パターンを使って「Case 変数 > 10 And 変数 < 20」と書くか、If文を使います。

Q. Toで範囲指定するとき、順番(小→大 vs 大→小)はどちらでも構いませんか?

A. Case 1 To 10のように「小さい値 To 大きい値」の順で書く必要があります。Case 10 To 1と逆に書くとどの値にも一致しなくなります。文字列の場合も辞書順で「前の値 To 後の値」の順で書いてください。

Q. Select Case内で複数の処理を実行してもいいですか?

A. できます。1つのCaseブロック内に何行でも処理を書けます。セルへの値設定・色変更・別の関数の呼び出し・条件付きのIf文まで、通常のVBAコードがそのまま書けます。Case Elseブロックも同様です。

Q. 大文字・小文字を区別せずにSelect Caseで比較するにはどうすればいいですか?

A. モジュールの先頭に「Option Compare Text」と書くとテキスト比較モードになり、大文字・小文字を区別しなくなります。デフォルトは「Option Compare Binary」(バイナリ比較・大文字小文字区別あり)です。または比較前にUCase()またはLCase()で統一してからSelect Caseに渡す方法もあります。

Q. Select CaseをFor Eachループと組み合わせて全行に適用できますか?

A. できます。For r = 2 To LastRowなどのループの中にSelect Caseを入れることで、シートの全行に条件分岐処理を適用できます。Section 08の業務パターンがその典型例です。ループ内でSelect Caseを使うことで「全行のステータスチェック」「全行の色分け」といった一括処理が可能になります。

Q. VBAのSelect Caseを自分で書くのが難しい場合、AIで生成できますか?

A. できます。Claude Codeに「どの値のときにどう処理したいか」の対応表や仕様を日本語で説明すると、ToキーワードやIsを組み合わせた最適なSelect Caseコードを生成してくれます。また既存のIf文をSelect Caseに書き直す「リファクタリング」も「このコードをSelect Caseで書き直して」と依頼するだけで対応できます。

AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年7月19日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。