Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 – Select Case

Excel VBA VBA
スポンサーリンク

Select Case は「一つの値で分岐をきれいに並べるスイッチ」

If ~ ElseIf ~ Else も「条件分岐」でしたが、
条件が増えてくると、どうしても読みにくくなります。

そこで登場するのが Select Case
これは、

  • 「一つの値」を見て
  • 「その値がどのパターンか」で処理を分ける

ことに特化した分岐の書き方です。

「この変数の値が 1 のとき」「2 のとき」「3 のとき」…
「この文字列が ‘A’ のとき」「’B’ のとき」…
といった“パターン分け”を、横にスッキリ並べられるのが強みです。


Select Case の基本構文と動き方

一番シンプルな形

基本形はこうです。

Select Case 判定したい値
    Case パターン1
        ' パターン1のときの処理
    Case パターン2
        ' パターン2のときの処理
    Case Else
        ' どのパターンにも当てはまらないときの処理
End Select
VB

ポイントは、

  • 最初に「何を基準に分けるか」を Select Case の後ろに書く
  • その値が Case に並んだパターンのどれに当てはまるかで処理が決まる
  • 上から順にチェックされ、最初に一致した Case だけが実行される

という流れです。

数値での簡単な例

Sub SampleSelectCaseBasic()

    Dim n As Long
    n = 2

    Select Case n
        Case 1
            MsgBox "n は 1 です"
        Case 2
            MsgBox "n は 2 です"
        Case 3
            MsgBox "n は 3 です"
        Case Else
            MsgBox "1~3 以外です"
    End Select

End Sub
VB

この場合、n は 2 なので、

  • Case 1 → 一致しない
  • Case 2 → 一致する → このブロックだけ実行
  • 以降の Case / Case Else は無視

という動きになります。


If ~ ElseIf と Select Case の違いを体感する

ElseIf で書いた場合

同じロジックを If ~ ElseIf で書くとこうなります。

If n = 1 Then
    MsgBox "n は 1 です"
ElseIf n = 2 Then
    MsgBox "n は 2 です"
ElseIf n = 3 Then
    MsgBox "n は 3 です"
Else
    MsgBox "1~3 以外です"
End If
VB

動きは同じですが、
「毎回 n = ○○ と書く必要がある」
「条件が増えると行がうるさくなる」
という欠点があります。

Select Case で書いた場合のスッキリ感

Select Case n
    Case 1
        MsgBox "n は 1 です"
    Case 2
        MsgBox "n は 2 です"
    Case 3
        MsgBox "n は 3 です"
    Case Else
        MsgBox "1~3 以外です"
End Select
VB

Select Case は、

  • 「n を見て分岐する」ということを最初に宣言
  • あとは「n が 1 のとき」「2 のとき」「3 のとき」とパターンだけ並べる

という形なので、
「一つの値を、いくつかのパターンに分類する」場面では、If よりも圧倒的に読みやすくなります。


範囲や複数値をまとめて書けるのが Select Case の真骨頂

範囲で分ける(To)

点数で評価ランクを分ける例を、Select Case で書いてみます。

Sub SampleSelectCaseRange()

    Dim score As Long
    score = 78

    Select Case score
        Case 90 To 100
            MsgBox "評価:S"
        Case 80 To 89
            MsgBox "評価:A"
        Case 70 To 79
            MsgBox "評価:B"
        Case 60 To 69
            MsgBox "評価:C"
        Case Else
            MsgBox "評価:D"
    End Select

End Sub
VB

ここでのポイントは、

  • Select Case score で「score を基準に分ける」と宣言
  • Case 90 To 100 のように「範囲」をそのまま書ける

というところです。

If ~ ElseIf だと、

If score >= 90 And score <= 100 Then
    ...
ElseIf score >= 80 And score <= 89 Then
    ...
VB

のように、毎回「score >=」「score <=」を書かないといけませんが、
Select Case なら「90 To 100」と一発で書けます。

複数の値をまとめる(カンマ区切り)

同じ処理をしたい値が複数あるときも、Select Case は得意です。

Sub SampleSelectCaseMulti()

    Dim dayNo As Long
    dayNo = 6   ' 1:日曜, 2:月曜, ... 7:土曜 という想定

    Select Case dayNo
        Case 1, 7
            MsgBox "週末です"
        Case 2, 3, 4, 5, 6
            MsgBox "平日です"
        Case Else
            MsgBox "不正な値です"
    End Select

End Sub
VB

Case 1, 7 のように、カンマで値を並べると、
「1 または 7 のとき」という意味になります。

If で書くと、

If dayNo = 1 Or dayNo = 7 Then
VB

となりますが、
Select Case のほうが「パターンの一覧」として視覚的に分かりやすくなります。


文字列にもそのまま使える

文字列での分岐例

Sub SampleSelectCaseString()

    Dim status As String
    status = Range("A1").Value

    Select Case status
        Case "未着手"
            MsgBox "これから着手します"
        Case "進行中"
            MsgBox "作業中です"
        Case "完了"
            MsgBox "完了済みです"
        Case Else
            MsgBox "状態が不明です"
    End Select

End Sub
VB

Select Case status としておけば、
Case "未着手" のように、
「status が ‘未着手’ のとき」というパターンを素直に書けます。

Excel の「ステータス列」や「区分コード」で処理を分けるときに、
Select Case はかなり相性がいいです。


Case Else は「漏れを拾う安全ネット」

Case Else を必ず意識する

Select Case では、どの Case にも当てはまらなかったときのために、
Case Else を書くことができます。

Select Case n
    Case 1
        ' ...
    Case 2
        ' ...
    Case Else
        ' 1でも2でもないとき
End Select
VB

これは、

  • 想定外の値が来たときにエラーに気づく
  • デバッグ用のメッセージを出す
  • 何もしない、という選択を明示する

といった「安全ネット」として、とても重要です。

特に実務では、
「本当は 1~3 しか来ないはずの値が、なぜか 99 になっていた」
みたいなことが普通に起こります。

そういうときに Case Else

Case Else
    MsgBox "想定外の値です: " & n
VB

と書いておくと、
「おかしなデータが流れてきている」ことにすぐ気づけます。


If と Select Case の使い分けの感覚

Select Case が向いている場面

ざっくり言うと、こんなときは Select Case が気持ちよくハマります。

  • 「一つの値」を基準に、パターン分けしたいとき
    (点数、ステータス、コード、曜日番号など)
  • 条件が3つ以上あって、If ~ ElseIf が長くなりそうなとき
  • 「値の一覧」や「範囲」をきれいに並べたいとき

逆に、

  • 複数の変数を組み合わせた複雑な条件
  • 「A かつ B」や「A または B」など、論理式がメインの条件

は、If ~ ElseIf のほうが素直なことが多いです。

どちらを選ぶか迷ったときの目安

「この分岐は、“一つの値のパターン分け”として考えられるか?」

と自分に聞いてみて、
Yes なら Select Case、No なら If、
くらいの感覚で選んでいくと、だんだん使い分けが自然になってきます。


まとめ:Select Case は「パターン分けを見える化する道具」

Select Case の本質は、

  • 一つの値を
  • いくつかのパターンに
  • 見やすく・整理して分岐させる

ための構文です。

押さえておきたいポイントをコンパクトに言うと、

  • Select Case 変数 で「何を基準に分けるか」を宣言する
  • Case 値Case 値1, 値2Case 10 To 20 のようにパターンを並べられる
  • 上から順にチェックされ、最初に一致した Case だけが実行される
  • Case Else は「想定外の値」を拾う安全ネットとしてとても大事
  • 「一つの値のパターン分け」なら If より Select Case のほうが読みやすい

タイトルとURLをコピーしました