Excel VBA | ネストした Select Case

VBA
スポンサーリンク

では、先ほどの 3段階ネストの Select Case を、もっとコンパクトに書く方法 を解説します。初心者でも理解できるようにステップごとに説明します。


1. 問題点

先ほどの例はネストが深く、コードの行数が多くて読みにくくなります。

Select Case 性別
    Case "男"
        Select Case 年齢
            Case 20 To 30
                Select Case 職業

…というように 3段階もネストしているため、コードの可読性が低いのが問題です。


2. コンパクト化の基本アイデア

方法1:内側の条件を 文字列連結でまとめて判断

  • 性別+年齢+職業を一つの文字列にして、Select Case で判定する
  • ネストを減らせる

例:

Sub 性別年齢職業判定_簡易版()
    Dim gender As String
    Dim age As Integer
    Dim job As String
    Dim key As String
    
    gender = Range("A1").Value
    age = Range("B1").Value
    job = Range("C1").Value
    
    ' 年齢カテゴリを作る
    Dim ageCategory As String
    Select Case age
        Case 20 To 30
            ageCategory = "若い"
        Case 31 To 50
            ageCategory = "中年"
        Case Is >= 51
            ageCategory = "シニア"
        Case Else
            ageCategory = "不明"
    End Select
    
    ' 性別+年齢カテゴリ+職業をキーにする
    key = gender & "_" & ageCategory & "_" & job
    
    Select Case key
        Case "男_若い_学生"
            MsgBox "若い男性の学生です"
        Case "男_若い_会社員"
            MsgBox "若い男性の会社員です"
        Case "女_中年_自営業"
            MsgBox "中年女性の自営業です"
        Case "男_シニア_会社員"
            MsgBox "シニア男性の会社員です"
        Case Else
            MsgBox "不明またはその他の組み合わせです"
    End Select
End Sub
Java

ポイント

  1. 年齢カテゴリを変数に分けて計算
    → これで中間のネストを削除
  2. 性別+年齢カテゴリ+職業を文字列として結合
    → 1回の Select Case でまとめて判定可能
  3. ネストが浅くなるので コードが読みやすくなり、保守もしやすい

方法2:関数化して整理

  • 「年齢カテゴリを返す関数」や「メッセージを作る関数」を作ることで、さらに読みやすくなる
Function 年齢カテゴリ(age As Integer) As String
    Select Case age
        Case 20 To 30
            年齢カテゴリ = "若い"
        Case 31 To 50
            年齢カテゴリ = "中年"
        Case Is >= 51
            年齢カテゴリ = "シニア"
        Case Else
            年齢カテゴリ = "不明"
    End Select
End Function

Sub 性別年齢職業判定_関数版()
    Dim gender As String, age As Integer, job As String
    Dim key As String
    
    gender = Range("A1").Value
    age = Range("B1").Value
    job = Range("C1").Value
    
    key = gender & "_" & 年齢カテゴリ(age) & "_" & job
    
    Select Case key
        Case "男_若い_学生"
            MsgBox "若い男性の学生です"
        Case "女_中年_会社員"
            MsgBox "中年女性の会社員です"
        Case Else
            MsgBox "不明またはその他の組み合わせです"
    End Select
End Sub
Java

メリット

  • ネストがほとんどなく、コードがスッキリ
  • 条件を変えたい場合も 関数や文字列を修正するだけ
  • 初心者でも理解しやすく、バグが入りにくい

💡 補足:

  • 条件が増えると、ネストが深くなるより 文字列や関数で整理する方が実務向き
  • もし組み合わせが非常に多い場合は、配列や Dictionary を使った判定も可能
タイトルとURLをコピーしました