Select Case文を使った条件分岐
EXCEL VBAの基本コードを紹介しています。初心者の方が順番に読んでくだけでVBAの基礎コードが理解出来るようになればなと思って、短めの記事で進めて行きたいと思います!
今回は、”Select Case文を使った条件分岐”について紹介します!
Select Case文と条件分岐
前回、IF文を使った条件分岐について紹介しました。複数の条件で分岐をしたい場合、IF文では”ElseIf”を使って条件をどんどん追加することが出来ましたね。
今回紹介するSelect Case文も多岐の分岐を実現する構文であることには変わりないですが、IFで実現するよりもよりコードをシンプルに分かりやすく記述することが可能です。
IF文の記事はこちら
例えば、次のEXCELシートで、こんな処理をするプログラムを考えてみましょう。
B3セルに入力した色に応じて、D3セルにその色にちなんだ野菜を表示させる。
緑・・・ピーマン
黄・・・レモン
青・・・ナス
まずは日本語で考えてみます。
- B3セルの値を取得する
- D3セルを取得する
- 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つの処理を紹介しました。次回は「繰り返し処理」について紹介したいと思います!
コメント