Select Case
多分読めると思いますが、これはセレクトケースと読みます。
どういった時に使うのかというと、Ifの様に条件を分岐させたい時に使います。
Ifの場合は複数条件を分岐させたい時はElseIfで分岐出来ましたが、Select Caseを使用するともっとお手軽に複数条件を分岐させる事が出来ます。
使用方法
Select Case Range("a1").Value Case 1 MsgBox "A1のセルの値は1です" Case 2 MsgBox "A1のセルの値は2です" Case 3 MsgBox "A1のセルの値は3です" Case Else MsgBox "A1のセルの値は1,2,3以外です" End Select
この様にSelect Caseに続いて何を見るのかを指定します。
今回はRange(“a1”).ValueなのでセルA1の値を見ていきます。
Caseに続いて半角スペースを空けて「その値が何だったら」を指定します。
続いて改行とインデントをして条件にヒットしたら行う動作を記述していきます。
最後にあるCase Elseとは「どの条件にもヒットしなかったら」を指します。もちろんその場合の動作は何もしなくていいのであれば省略可です。
変数の値で分岐
上記ではRange(“a1”)の値を見ていきましたが、実際に使用する際は変数の値を見る事の方が多くなるかと思います。その場合はこのようにしていけば良いでしょう。
Dim a As Range Set a = Range("a1") Select Case a.Value Case 1 MsgBox "A1のセルの値は1です" Case 2 MsgBox "A1のセルの値は2です" Case 3 MsgBox "A1のセルの値は3です" Case Else MsgBox "A1のセルの値は1,2,3以外です" End Select
こうですね。これはあくまでもRangeの場合の例ですが、数値や文字列が入った変数でも使用できます。
またこういった使用もできます。
Dim a As Range Set a = Range("a1") Select Case a.Value Case 1, 2, 3 MsgBox "A1のセルの値は3以下です" Case Else MsgBox "A1のセルの値は1,2,3以外です" End Select
○○と○○の時はこの処理、それ以外はこの処理の様な分岐をさせたい場合はカンマで区切って複数指定する事が出来ます。
スコア等の判定に使用する場合
上記では値がどうだった時の判定でしたが、もっと大きく条件を指定したい場合には向いていません。そういった場合にはCase Isを使用していきます。
Dim score As Integer score = 79 Select Case score Case Is > 80 MsgBox "すごい!" Case Is > 70 MsgBox "そこそこですね。" Case Is > 60 MsgBox "もうちょっと" Case Is > 50 MsgBox "頑張りましょう" End Select
この様に調査の対象となる変数の値が○○よりも大きかったらというような形で指定する事が出来ます。
基本的にプログラムは特別な指定をしない限りは上から下に実行されていきます。Select Caseは一度ヒットしたら他の条件に入っていく事はしないので今回は点数が上の方から指定していけば望む結果を得る事が出来ます。
逆に点数が下の方から書いたら点数が50点よりも上の場合は仮に80点よりも上でも”頑張りましょう”になってしまいます。
この様にSelect Caseなどの条件分岐ではヒットさせる順番にも気を配っていく必要があります。
ちなみにCaseはかなりの数増やせる様ですが(多分メモリの最大値まで)そんなに条件が分岐するコードは可読性が低くメンテナンスしにくいコードになっていると思うので、そうならないようにもっとシンプルな構造にならないかどうかを一度考えてみると良いでしょう。
次回はちょっと実践的な内容にしていきましょう。「月ごとの集計シート的なものを翌月更新」みたいな内容で進めていこうかと思います。