
複数の条件で判定を評価する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段階評価ぐらいなら可能なので、まずは○×評価のおさりです。
Private Sub CommandButton1_Click()
If Range(“C3”).Value >= 90 Then
Range(“D3”).Value = “〇”
ElseIf Range(“C3”).Value <= 30 Then
Range(“D3”).Value = “×”
End If
End Sub
これで90点以上ならば〇、29点以下×を隣のセルD3に記載しました。

ここまでは問題なくできそうですよね。
それでは5つ並べて5段階評価させましょう。

Private Sub CommandButton10_Click()
If Range(“C3”).Value >= 90 Then
Range(“D3”).Value = “A”
ElseIf Range(“C3”).Value >= 70 And Range(“C3”).Value <= 89 Then
Range(“D3”).Value = “B”
ElseIf Range(“C3”).Value >= 50 And Range(“C3”).Value <= 69 Then
Range(“D3”).Value = “C”
ElseIf Range(“C3”).Value >= 30 And Range(“C3”).Value <= 49 Then
Range(“D3”).Value = “D”
ElseIf Range(“C3”).Value <= 29 Then
Range(“D3”).Value = “E”
End If
End Sub
ずいぶん長くなりましたが、複数条件と言っても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コードで書いてみましょう。
Private Sub CommandButton1_Click()
Select Case Range(“C3”).Value
Case Is >= 90
Range(“D3”).Value = “A”
Case 70 To 89
Range(“D3”).Value = “B”
Case 50 To 69
Range(“D3”).Value = “C”
Case 30 To 49
Range(“D3”).Value = “D”
Case Is <= 29
Range(“D3”).Value = “E”
End Select
End Sub
- コマンドボタン1が押されたら
- Select Caseステートメントを使いセルC3の値を参照
- 90点以上なら
- A評価をセルD3に記載
- 70点~89点の場合
- B評価をセルD3に記載
- 50点~69点の場合
- C評価をセルD3に記載
- 30点~499点の場合
- D評価をセルD3に記載
- 29点以下の場合
- E評価をセルD3に記載
- Select Caseステートメント終了
- マクロ終了
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点または空欄(未受験) |