プログラミング初心者向けのVBA入門講座第11回です。
→過去の入門講座目次はこちら
前回は条件によって処理を分岐する If ステートメントについて紹介しました。
今回はもうひとつの代表的な条件分岐処理のステートメントであるSelect Case ステートメントを紹介します。
Select Case の基本
If ステートメントがひとつの条件式に対して成立(True)か不成立(False)かで処理を分岐させるのに対して、Select Case ステートメントはある対象の値に対して複数の条件に応じた処理を行うときに用います。
例えばセルA1に曜日が記入されているとき If ステートメントでは
If Range(“A1”).Value = “月曜” Then 処理1
とセルの値が月曜か否かで判定するのに対し、Select Case ステートメントでは
Select Case Range(“A1”).Value
Case “月曜”
処理1
Case “火曜”
処理2
Case “水曜”
処理3
・・・
とセルA1の値が月曜の場合、火曜の場合、水曜の場合・・・と複数の条件についての処理を指定することができます。
またIf ステートメントで条件式が不成立のときの処理を Else を用いて記述できたように、Select Case ステートメントでもいずれの条件にも該当しないときの処理を Case Else を用いて記述することができます。
またステートメントの最後にはEnd Select でクローズします。
つまりSelect Case ステートメントの基本的な書き方は次のようになります。
Select Case 対象の値
Case 条件1
処理1
Case 条件2
処理2
・・・
Case 条件n
処理n
Case Else
条件1~nのいずれも該当しないときの処理
End Select
応用編
Case の後の条件を「,(カンマ)」で区切ると複数の条件のいずれかに該当したときの処理として指定できます。
Case “月曜” , “水曜” , “金曜”
処理1
とすれば対象の値が月曜か水曜または金曜のいずれかのときに処理1が実行されます。
また Case の後の条件として2つの値を「To」でつないで範囲を指定することもできます。
Case 50 To 100
処理1
とすれば対象の値が50から100の範囲内にあるときに処理1が実行されます。
また、対象の値に対して比較演算子を用いて比較することもできます。その場合はCase の後の条件文に「Is」を用いて比較します。
Select Case Range(“A1”).Value
Case Is > 80
処理1
Case Is < 30
処理2
End Select
とすればセルA1の値が80より大きいときに処理1を、30より小さいときに処理2を実行します。
このときの「Is」は対象の値(この例ではRange(“A1”).Value)に該当します。
Select Case を実際に使ってみよう
それでは実際にSelect Case ステートメントを使ったマクロを作成してみましょう。
次のマクロはセルA1に入力された曜日に応じてセルB1にメッセージを表示します。
Sub test1()
Dim msg As String
Select Case Range("A1").Value
Case "月曜"
msg = "資源ゴミの日"
Case "火曜", "金曜"
msg = "燃えるゴミの日"
Case "木曜"
msg = "燃えないゴミの日"
Case Else
msg = "ゴミは出せません"
End Select
Range("B1").Value = msg
End Sub
もうひとつ作成してみましょう。
次のマクロではセルA1に入力されたテストの合計点に応じてセルB1に評価結果を表示します。
Sub test2()
Dim rslt As String
Select Case Range("A1").Value
Case Is > 400
rslt = "優"
Case 300 To 400
rslt = "良"
Case Is < 300
rslt = "不合格"
End Select
Range("B1").Value = rslt
End Sub
注意点
VBA の Select Case ステートメントでは上から順番に読んでいき条件が一致して処理が実行されるとその後はEnd Select の次の行に進みます。そのためそれより下に記述された Case 条件 が読み取られることはなく、例えその条件が一致していても処理が実行されることはありません。
例えばセルA1の値を80以上にして次のマクロを実行するとします。
Sub test3()
Select Case Range("A1").Value
Case Is >= 50
Range("B1").Value = "合格"
Case Is >= 80
Range("C1").Value = "優"
End Select
End Sub
この場合、最初の条件 Case Is >= 50 が成立するためその処理としてセルB1に「合格」と記入され、その後はEnd Select の次の行である End Sub が実行されてマクロが終了します。
2つめのCase Is >= 80 も成立しますが、それより上の条件が成立しているためここより下の行が実行されることはありません。
両方の処理を実行したい場合は前回説明したようなネスト(入れ子)構造にする必要があります。
Select Case ステートメントもネストにすることはできますが If ステートメントを用いたほうが可読性が良い場合は無理にSelect Case ステートメントを使う必要はないでしょう。
まとめ
今回はSelect Case ステートメントについて紹介しました。
前回紹介したIf ステートメントに比べると使用頻度は若干少ないかもしれませんが、判定したい条件によってはIf ステートメントよりもSelect Case を用いたほうが分かりやすいコードになるケースもあります。
両方の特徴をよく理解して状況に応じて使い分けられるようにしましょう。
コメント