Excel VBA | ネストした Select Case

VBA
スポンサーリンク

では ネストした 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
Java

4. 解説

  1. 外側の Select Case day で曜日を判断
    • 平日か土日かそれ以外かに大きく分ける
  2. 平日の場合は さらに時間で条件分岐
    • 内側の Select Case hour で 9〜17 の勤務時間か、それ以外かを判定
  3. ネストすることで、複雑な条件でも整理して書ける

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

解説

  1. 外側の Select Case gender
    • 性別が「男」か「女」か、またはそれ以外かを判断します。
    • 男か女の場合のみ、次のステップで年齢の判断を行います。
  2. 内側の Select Case age
    • 男性の場合は 20 To 30 → 若い男性、Is >= 31 → 年上の男性
    • 女性の場合も同様に判定
    • Case Else で 20未満など想定外の年齢も安全に処理
  3. ポイント
    • ネストすることで「性別ごとに年齢を分ける」という複雑な条件を整理できる
    • 外側の条件が成立しない場合は内側は実行されない
    • Case Else を必ず書くことで、想定外の値が入力されてもエラーにならず安全
  4. 初心者向けのコツ
    • ネストが深くなると見にくくなるので、**「外側で大きく分類 → 内側で細かく分類」**の順で考えると整理しやすい
    • メッセージを MsgBox で出すと、結果をすぐ確認できる
タイトルとURLをコピーしました