では ネストした Select Case について、初心者向けに丁寧に解説し、例題と解答も示します。
1. ネストした Select Case とは?
ネスト(入れ子) とは、Select Case の中にさらに別の Select Case を書くことです。
「2段階で条件を分けたいとき」に使います。
例えると
まずは大きな条件で分ける
└─ その中でさらに細かく条件分け
2. 基本構造
Select Case 値1
Case 条件A
' 条件Aの処理
Select Case 値2
Case 条件X
' 条件Aかつ条件Xの処理
Case 条件Y
' 条件Aかつ条件Yの処理
Case Else
' 条件Aかつその他
End Select
Case 条件B
' 条件Bの処理
Case Else
' 条件1のどれにも当てはまらないとき
End Select
Java- 外側の
Select Caseで大きく分ける - 内側の
Select Caseでさらに細かく分ける - ネストの深さは必要に応じて増やせますが、深すぎると読みにくくなるので注意
3. 例題:曜日と時間でメッセージを出す
条件
- セル
A1に曜日(文字列)が入っている - セル
B1に時間(数字:0〜23)が入っている - メッセージ:
- 平日(月〜金)かつ 9〜17 → 「勤務時間です」
- 平日(月〜金)かつ それ以外 → 「勤務時間外です」
- 土日 → 「休日です」
- その他 → 「不正な曜日です」
解答例
Sub 曜日時間判定()
Dim day As String
Dim hour As Integer
day = Range("A1").Value
hour = Range("B1").Value
Select Case day
Case "月", "火", "水", "木", "金"
' 平日の場合は時間でさらに分ける
Select Case hour
Case 9 To 17
MsgBox "勤務時間です"
Case Else
MsgBox "勤務時間外です"
End Select
Case "土", "日"
MsgBox "休日です"
Case Else
MsgBox "不正な曜日です"
End Select
End Sub
Java4. 解説
- 外側の
Select Case dayで曜日を判断- 平日か土日かそれ以外かに大きく分ける
- 平日の場合は さらに時間で条件分岐
- 内側の
Select Case hourで 9〜17 の勤務時間か、それ以外かを判定
- 内側の
- ネストすることで、複雑な条件でも整理して書ける
5. ネストのポイント
- 内側の
Select Caseは、外側の条件が満たされた場合のみ実行される Case Elseは忘れずに書くと安全- ネストが深くなると読みにくいので、なるべく外側の条件でまとめられないか検討する
6. 練習問題(ネスト版)
問題
- セル
A1:性別 (“男” または “女”) - セル
B1:年齢(整数) - 条件:
- 男かつ 20〜30 → 「若い男性です」
- 男かつ 31以上 → 「年上の男性です」
- 女かつ 20〜30 → 「若い女性です」
- 女かつ 31以上 → 「年上の女性です」
- その他 → 「不明」
解答例と解説
- セル
A1:性別 (“男” または “女”) - セル
B1:年齢(整数) - 条件:
- 男かつ 20〜30 → 「若い男性です」
- 男かつ 31以上 → 「年上の男性です」
- 女かつ 20〜30 → 「若い女性です」
- 女かつ 31以上 → 「年上の女性です」
- その他 → 「不明」
解答例
Sub 性別年齢判定()
Dim gender As String
Dim age As Integer
gender = Range("A1").Value
age = Range("B1").Value
Select Case gender
Case "男"
' 男性の場合は年齢でさらに分ける
Select Case age
Case 20 To 30
MsgBox "若い男性です"
Case Is >= 31
MsgBox "年上の男性です"
Case Else
MsgBox "不明"
End Select
Case "女"
' 女性の場合は年齢でさらに分ける
Select Case age
Case 20 To 30
MsgBox "若い女性です"
Case Is >= 31
MsgBox "年上の女性です"
Case Else
MsgBox "不明"
End Select
Case Else
' 男・女以外は不明
MsgBox "不明"
End Select
End Sub
Java解説
- 外側の
Select Case gender- 性別が「男」か「女」か、またはそれ以外かを判断します。
- 男か女の場合のみ、次のステップで年齢の判断を行います。
- 内側の
Select Case age- 男性の場合は
20 To 30→ 若い男性、Is >= 31→ 年上の男性 - 女性の場合も同様に判定
Case Elseで 20未満など想定外の年齢も安全に処理
- 男性の場合は
- ポイント
- ネストすることで「性別ごとに年齢を分ける」という複雑な条件を整理できる
- 外側の条件が成立しない場合は内側は実行されない
Case Elseを必ず書くことで、想定外の値が入力されてもエラーにならず安全
- 初心者向けのコツ
- ネストが深くなると見にくくなるので、**「外側で大きく分類 → 内側で細かく分類」**の順で考えると整理しやすい
- メッセージを
MsgBoxで出すと、結果をすぐ確認できる
