複数の条件で判定を評価するVBA~Select Case
If~Thenを覚えたのに、複数条件を複数の答えだすVBAで悩みませんでしたか?
例えばテストの結果で5段階評価することありませんか?
テストの結果が90点以上ならA、70点~89点の間はB、50点~69点はC、30点~49点はD、29点以下はEなんて評価をVBAを使って一瞬で判定どうやるんだろうって。
いつものようにユーザーフォームに配置したコマンドボタンを押すことにより、処理を実行するVBAコードを書いていきます。
If~Thenでもできるけど・・・
VBAに取り組んで最初に覚える条件分岐といえば、If~Thenですよね。
ElseIfで続ければ、「もし○○だったら、A、そうでなかったらBというように2つの条件を2つの答えで処理を振り分けられます。
と、いうことは・・・
そうです、つづけてElseIfをやり続ければ5段階評価ぐらいなら可能なので、まずは○×評価のおさりです。
これで90点以上ならば〇、29点以下×を隣のセルD3に記載しました。
ここまでは問題なくできそうですよね。
それでは5つ並べて5段階評価させましょう。
ずいぶん長くなりましたが、複数条件と言っても5つしかないのでそんなに面倒ではないですが、印刷枚数を指定する時などは、30枚となれば、今の6倍の長さになってしまうのは現実的に無理ですよね。
そこでお待たせしました、複数条件で処理を振り分けるSelect Caseステートメントを使いましょう。
Select Caseステートメント
Select Caseを使うと、1つ目の条件に合致すると処理を実行して、条件に合わないと次の2つ目の条件に移って処理を続け、2つ目の条件が合致すると実行、さらに条件に合わないと次の条件、3つ目に移るという具合です。
要するに、条件に合うまで次から次へと処理を行ってくれる便利なものです。
最初にも書きましたが、テストの結果が90点以上ならA、70点~89点の間はB、50点~69点はC、30点~49点はD、29点以下はEと5段階評価もこのようなイメージになります。
Select Case 条件判断する特定のセルの値などの対象
Case 条件式1
対象が条件式1と合致する時の処理
Case 条件式2
対象が条件式2と合致する時の処理
・・・
・・・
・・・
End Select
では、実際にVBAコードで書いてみましょう。
If~Then ElseIfを使うよりもシンプルになりましたし、それほど難しくないですよね。
上のコードのようにSelect CaseステートメントのCaseの後の計算式(比較演算子)はいくつかパターンがあります。
使用しているのは以上・間・以下を使っていますが、その他成績表の評価などで使ったことのあるものを書き出してみました。
VBAコードの書き方 | 意味 |
Case 100 | 100点の時(完全一致) |
Case Is >= 80 | 80点以上の時 |
Case Is > 80 | 80点より大きい時(81点以上と同じ) |
Case Is <= 40 | 40点以下の時 |
Case Is < 40 | 40点未満の時(39点以下と同じ) |
Case 41 To 79 | 41点以上79点以下 |
Case 0,”” | 0点または空欄(未受験) |