Excel VBA | Select Case文

VBA
スポンサーリンク

では Excel VBA の Select Case をプログラミング初心者向けに、例題を交えて丁寧に解説します。順を追って見ていきましょう。


1. Select Case 文とは?

Select Case 文は、ある値がどのケース(条件)に当てはまるかで処理を分ける命令です。
簡単に言うと「値によって道を分ける信号機」のようなものです。

値が A なら → 処理1
値が B なら → 処理2
値が C なら → 処理3
それ以外なら → 処理4

これを VBA で書くと:

Select Case 比較する値
    Case 値1
        ' 値1のときの処理
    Case 値2
        ' 値2のときの処理
    Case Else
        ' どれにも当てはまらないときの処理
End Select
VB

2. Select Case のメリット

  • If … ElseIf … Else でも同じことはできますが、
    **「ひとつの値のいくつかのパターンに分けたい」**場合は Select Case の方がスッキリ書けます。
  • 読む人に「この値を元に場合分けしているんだな」と意図が伝わりやすいです。

3. 基本の使い方

例:点数による判定

セル B2 の値を見て、成績を表示する例です。

Sub 成績判定()
    Dim score As Integer
    score = Range("B2").Value  ' B2 の値を取得

    Select Case score
        Case 90 To 100
            MsgBox "成績は A です"
        Case 80 To 89
            MsgBox "成績は B です"
        Case 70 To 79
            MsgBox "成績は C です"
        Case 60 To 69
            MsgBox "成績は D です"
        Case Else
            MsgBox "成績は F です"
    End Select
End Sub
VB

✅ ポイント:

  • Case 90 To 100 は「90 以上 100 以下」の意味。
  • Case Else は「どの範囲にも当てはまらないとき」の処理。
  • 数字だけでなく文字列も扱えます。

4. 複数の値をまとめて処理する

Sub 曜日判定()
    Dim day As String
    day = Range("A1").Value

    Select Case day
        Case "月", "火", "水", "木", "金"
            MsgBox "平日です"
        Case "土", "日"
            MsgBox "休日です"
        Case Else
            MsgBox "曜日の値が正しくありません"
    End Select
End Sub
VB

✅ ポイント:

  • Case "月", "火", "水" のように、複数の値をカンマで区切って同じ処理にできます。

5. 比較演算子を使う

Sub 判定()
    Dim x As Integer
    x = Range("C1").Value

    Select Case x
        Case Is >= 80
            MsgBox "優秀です"
        Case Is >= 50
            MsgBox "普通です"
        Case Else
            MsgBox "もう少し頑張りましょう"
    End Select
End Sub
VB

✅ ポイント:

  • Case Is >= 80 のように「以上」「以下」「より大きい」などの条件も指定可能です。
  • Is は「〜である」「〜以上/以下」の意味。

6. 練習問題

問題 1

セル A1 に入っている数字が:

  • 1 → 「赤」
  • 2 → 「青」
  • 3 → 「黄」
  • その他 → 「その他の色」

に応じてメッセージを出す VBA マクロを書いてください。


問題 2

セル B1 に曜日が入っています:

  • 月〜金 → 「平日」
  • 土・日 → 「休日」
  • その他 → 「不明」

に応じてメッセージを出す VBA マクロを書いてください。


問題 3

セル C1 に点数が入っています:

  • 80以上 → 「合格」
  • 50以上 → 「追試」
  • それ未満 → 「不合格」

に応じてメッセージを出す VBA マクロを書いてください。


解答例と解説

問題 1 解答:数字に応じた色表示

Sub 色判定()
    Dim num As Integer
    num = Range("A1").Value  ' A1の値を取得

    Select Case num
        Case 1
            MsgBox "赤"
        Case 2
            MsgBox "青"
        Case 3
            MsgBox "黄"
        Case Else
            MsgBox "その他の色"
    End Select
End Sub
VB

解説

  • Select Case num で A1 の値を比較します。
  • Case 1 → A1 が 1 のときに「赤」を表示。
  • Case 2, Case 3 も同様。
  • Case Else は 1, 2, 3 以外の値のときに対応。
  • ポイント:数字のパターンが少ない場合は Select Case が見やすく簡単。

問題 2 解答:曜日の判定

Sub 曜日判定()
    Dim day As String
    day = Range("B1").Value  ' B1の値を取得

    Select Case day
        Case "月", "火", "水", "木", "金"
            MsgBox "平日です"
        Case "土", "日"
            MsgBox "休日です"
        Case Else
            MsgBox "不明な曜日です"
    End Select
End Sub
VB

解説

  • 文字列の場合も Select Case が使えます。
  • 複数の値を同じ処理にしたい場合は , で区切ります。
  • Case Else で不正な値や空白にも対応でき、予期せぬエラーを防ぎます。

問題 3 解答:点数による合否判定

Sub 合否判定()
    Dim score As Integer
    score = Range("C1").Value  ' C1の値を取得

    Select Case score
        Case Is >= 80
            MsgBox "合格"
        Case Is >= 50
            MsgBox "追試"
        Case Else
            MsgBox "不合格"
    End Select
End Sub
VB

解説

  • 数値の範囲を Case Is >= 80 のように書けます。
  • 上から順番に条件を判定するので、「80以上 → 合格」「50以上 → 追試」 の順番にすることが重要です。
    • もし順番を逆にすると、80以上でも50以上の条件に当てはまってしまい正しく判定できません。
  • Case Else で 50 未満の点数を「不合格」としています。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました