【EXCEL VBA | 基礎コード】Select Case文を使った条件分岐

スポンサーリンク

Select Case文を使った条件分岐

EXCEL VBAの基本コードを紹介しています。初心者の方が順番に読んでくだけでVBAの基礎コードが理解出来るようになればなと思って、短めの記事で進めて行きたいと思います!

今回は、"Select Case文を使った条件分岐"について紹介します!

Select Case文と条件分岐

前回、IF文を使った条件分岐について紹介しました。複数の条件で分岐をしたい場合、IF文では"ElseIf"を使って条件をどんどん追加することが出来ましたね。

今回紹介するSelect Case文も多岐の分岐を実現する構文であることには変わりないですが、IFで実現するよりもよりコードをシンプルに分かりやすく記述することが可能です。

IF文の記事はこちら

例えば、次のEXCELシートで、こんな処理をするプログラムを考えてみましょう。

B3セルに入力した色に応じて、D3セルにその色にちなんだ野菜を表示させる。

緑・・・ピーマン

黄・・・レモン

青・・・ナス

まずは日本語で考えてみます。

  1. B3セルの値を取得する
  2. D3セルを取得する
  3. B3セルの値に応じて処理を変える
    • 「緑」の場合
      D3セルに"ピーマン"と表示する
    • 「黄」の場合
      D3セルに"レモン"と表示する
    • 「青」の場合
      D3セルに"ナス"と表示する

こんな感じですね。

3の「B3セルの値に応じて処理を変える」の部分が条件分岐の部分です。

IF文を使って、プログラムにしてみましょう。

Sub test()

    Dim sheet As Worksheet: Set sheet = ThisWorkbook.ActiveSheet
    Dim val_B3 As String: val_B3 = sheet.Range("B3")
    Dim rng_D3 As Range: Set rng_D3 = sheet.Range("D3")
    
    
    'IF文を使って条件分岐する
    If val_B3 = "緑" Then
            rng_D3.Value = "ピーマン"
    
    ElseIf val_B3 = "黄" Then
            rng_D3.Value = "レモン"
        
    ElseIf val_B3 = "青" Then
            rng_D3.Value = "ナス"
            
    Else
            rng_D3.Value = "分かりません"

    End If
        
End Sub

実行動画

ちゃんと動きましたね(^^)

Select Caseの構文

それではこれと同じものをSelect Case文でやってみます。

構文

Select Case 比較する値

  Case 値1

    比較する値と値1が同じだった時の処理

  Case 値2

    比較する値と値2が同じだった時の処理

  Case 値3

    比較する値と値3が同じだった時の処理

  Case Else

    いずれの値も同じでなかった時の処理

End Select

「case 値」は繋げて書いていくことでもっと沢山増やすことが出来ます。

分かりやすいように、先程IF文で作ったものを、switch文で書き直して、比較しながら考えましょう。

Sub test()

    Dim sheet As Worksheet: Set sheet = ThisWorkbook.ActiveSheet
    Dim val_B3 As String: val_B3 = sheet.Range("B3")
   Dim rng_D3 As Range: Set rng_D3 = sheet.Range("D3")    

    'Select Case文を使って条件分岐する
    Select Case val_B3
        Case "緑"
          rng_D3.Value = "ピーマン"

        Case "黄"
          rng_D3.Value = "レモン"

        Case "青"
       rng_D3.Value = "ナス"
        
        Case Else
            rng_D3.Value = "分かりません"
    End Select

End Sub

IF文に比べると、比較の対象は、「比較する値」の部分にまとめられており、「Case」のところで条件がスッキリしているので見やすい印象がありますね(^^)

同じ動きになるか動画で確認してみましょう。

同じ動きになりました(^^)

数値の大小の比較

数値の大小を比較する場合は、「Case Is」を使います。

スプレッドシートのサンプルを少し変えて説明します。

B3セルに「点数」を入れ、その数値の大きさによって、D4セルの結果表示を変えます。

点数

100点・・・"満点合格!!"

60点以上100点未満・・・"合格"

60点未満・・・不合格

こんな条件を考えます。

Sub test()

    Dim sheet As Worksheet: Set sheet = ThisWorkbook.ActiveSheet
    Dim val_B3 As Integer: val_B3 = sheet.Range("B3")
    Dim rng_D3 As Range: Set rng_D3 = sheet.Range("D3")

   'Select Case文を使って条件分岐する
    Select Case val_B3
    
        Case Is = 100
            rng_D3.Value = "満点合格!!"

        Case Is >= 60
            rng_D3.Value = "合格"

        Case Is >= 0
             rng_D3.Value = "不合格"
        
        Case Else
            rng_D3.Value = "エラー"
    End Select

End Sub

Select Case文以外はこれまでと同じです。

比較演算子を使う場合は、上のコードの様に、「Case Is」を使うので間違えないように注意してください。

プログラムは上から処理をしていくので、大きいもの順に書いています。どこかで、合致した場合はその後の処理は飛ばされてSelect Case文から抜けるような仕様になっています。

テクニック

複数の条件が同じ処理の場合

複数の条件が同じ処理の場合、「Case 値」の"値"を「,」カンマで繋げて書くことで同じ処理の記述を省略することが出来ます。

次のコードを見てください。※最初のサンプルに戻ります。

Select Case val_B3
    
    Case "緑"
        rng_D3.Value = "ピーマン"

    Case "黄"
        rng_D3.Value = "レモン"

    Case "青", "黒"    '「,」カンマで繋げて書く
         rng_D3.Value = "ナス"
        
    Case Else
        rng_D3.Value = "分かりません"
End Select

B3セルが「黒」の場合もD3セルに「ナス」と表示させるコートです。

実行してみましょう。

「青」でも「黒」でも「ナス」と表示されましたね。

「Case 値」条件式を使う

複雑な条件を使いたい場合、Case側に条件式を入れることも出来ます。

構文で言う「比較する値」を「True」に設定します。

そして、Case側に条件式を入れることでTrueかどうかの判定を行うテクニックです。

点数と結果の方のサンプルを、この方法で書き直してみます。

Sub test()

    Dim sheet As Worksheet: Set sheet = ThisWorkbook.ActiveSheet
    Dim val_B3 As Integer: val_B3 = sheet.Range("B3")
    Dim rng_D3 As Range: Set rng_D3 = sheet.Range("D3")

   'Select Case文を使って条件分岐する
    Select Case True  'Trueに設定
    
        Case val_B3 = 100  'こっちに条件式
            rng_D3.Value = "満点合格!!"

        Case val_B3 >= 60 'こっちに条件式
            rng_D3.Value = "合格"

        Case val_B3 >= 0 'こっちに条件式
             rng_D3.Value = "不合格"
        
        Case Else
            rng_D3.Value = "エラー"
    End Select

End Sub

実行してみます。

同じ動きになりましたね(^^)

まとめ

制御構文も今回で2回目です、条件分岐の2つの処理を紹介しました。次回は「繰り返し処理」について紹介したいと思います!