では 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
VB2. 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 未満の点数を「不合格」としています。
