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 の入力に対しては金額が表示されますが、その他の値に対してはエラーメッセージが表示されます。

vba_select_case_1

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

カンマ , で区切ることで複数項目を指定することができます。

vba_case_select2

条件を指定する

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

vba_case_select3

条件に範囲を指定する

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

vba_case_select4


イベント

2017/12/05(火)
Design Thinking Square