Excel VBAの条件分岐:Select Case
VBA のプログラム中で変数の内容によって分岐処理を行いたい場合があります。
条件分岐の構文である If 文を使って実装することもできますが、Select Case を使った方がより簡潔にコードを記述できる場合があります。ここでは、Select Case の使い方について説明します。
Select Case の使い方
まずは Select Case の基本的な構文について見ていきます。
Select Case 変数 Case 値1 変数が値1と一致する場合に実行される処理 Case 値2 変数が値2と一致する場合に実行される処理 Case Else 上記の条件がひとつも成り立たない場合に実行される End Select
変数が上から順に評価されていき、変数と値が一致したブロックの処理が実行されます。Case はいくつでも追加することができます。
実際に Select Case の具体例を示します。次のコードは1~3までのメニューを選んでもらい、料金を表示する例です。
' 評価する変数の準備 Dim menu As Integer ' ユーザー入力 menu = InputBox("[1]牛丼、[2]ポテト、[3]うな重") ' menuの内容により分岐処理 Select Case menu Case 1 MsgBox "300円になります。" Case 2 MsgBox "200円になります。" Case 3 MsgBox "3,000円になります。" Case Else MsgBox "エラー:1から3までの数値を入力してください" End Select
上の例では 1, 2, 3 の入力に対しては金額が表示されますが、その他の値に対してはエラーメッセージが表示されます。
Case の値には数値型以外の変数を指定することができます。
' 評価する変数の準備 Dim menu As String ' ユーザー入力 menu = InputBox("牛丼、ポテト、うな重のどれにしますか?") ' menuの内容により分岐処理 Select Case menu Case "牛丼" MsgBox "300円になります。" Case "ポテト" MsgBox "200円になります。" Case "うな重" MsgBox "3,000円になります。" Case Else MsgBox "メニューにある商品を選んでください。" End Select
複数項目を指定する
Case の値は複数指定することもできます。
' 評価する変数の準備 Dim menu As String ' ユーザー入力 menu = InputBox("牛丼、ポテト、うな重、かつ丼、アイスクリームのどれにしますか?") ' menuの内容により分岐処理 Select Case menu Case "牛丼", "かつ丼" ' 牛丼あるいはかつ丼場合 MsgBox "300円になります。" Case "ポテト", "アイスクリーム" ' ポテトあるいはアイスクリーのム場合 MsgBox "200円になります。" Case "うな重" MsgBox "3,000円になります。" Case Else MsgBox "メニューにある商品を選んでね。" End Select
カンマ , で区切ることで複数項目を指定することができます。
条件を指定する
Select Case は Is を使うことで条件を指定することができます。
Select Case 変数 Case Is 条件1 条件1がTrueの場合に実行される Case Is 条件2 条件2がTrueの場合に実行される Case Else 上記の条件がひとつも成り立たない場合に実行される End Select
次の例はテストの点数を入力してもらい結果を表示するコードです。
' 評価する変数の準備 Dim score As Integer ' ユーザー入力 score = InputBox("テストの点数は?") ' scoreの内容により分岐処理 Select Case score Case Is > 80 MsgBox "A判定です" Case Is > 70 MsgBox "B判定です" Case Is > 60 MsgBox "C判定です" Case Else MsgBox "不合格です" End Select
条件に範囲を指定する
Select Case は To を使うことで範囲指定できます。
Select Case 変数 Case 小さい値1 To 大きい値1 「小さい値1 <= 変数 And 変数 <= 大きい値1」の場合に実行される Case 小さい値2 To 大きい値2 「小さい値2 <= 変数 And 変数 <= 大きい値2」の場合に実行される Case Else 上記の条件が1つも成り立たない場合に実行される End Select
次の例はLVを入力し、コメントを返すコードです。
' 評価する変数の準備 Dim LV As Integer ' ユーザー入力 LV = InputBox("あなたは伝説の勇者です。今何LVですか?") ' LVの内容により分岐処理 Select Case LV Case 1 To 10 MsgBox "もっとスライムをやっつけて強くなろう。" Case 11 To 20 MsgBox "どうかドラゴンをやっつけてください!" Case 21 To 29 MsgBox "どうか悪魔の騎士をやっつけてください!" Case Is >= 30 MsgBox "あなたはもう十分に強い!" End Select