エクセルVBAで特定のセルに対して複数の条件で処理を分ける方法

Loop繰り返し処理VBA VBA

スポンサーリンク


特定のセルの値が1つではなく2つ以上の複数の時に答えが変わる場合などどのようにExcel-VBAでコードを書いていいの困ったことはありませんか?

このように複数の条件の下で処理を振り分ける方法って簡単にないものかExcel-VBAに取り組んだ時に、悩みましたね。

それが、印刷する時です。

いつも決まった枚数を印刷するならば、Copies:=10とかコードを書いておけば、必ず10枚印刷されるのですが、可能であれば、枚数を指定して必要枚数だけ印刷したくなってきました。

そうなると、特定のセルの値が〇〇枚ならば〇〇枚、✖✖の場合は✖✖枚と、2つしかなければIfステートメントでいいのですが、印刷の場合などはもっと種類が必要ですよね。

そこで、複数の条件で処理を振り分けるSelect Caseステートメントを使用すると簡単に解決できます。

ちなみに、Ifステートメント(ElseIf)でも同じように複数の条件で処理を振り分けることができますが、Select Caseステートメントとの違いは、条件判断が同じである必要が無いという点です。

Select Caseステートメントは条件判断する対象が1つだけなので1個しかないならば、Select Caseステートメントを使い、複数ならばIfステートメント(ElseIf)を使い分けをすればいいのですね。
スポンサーリンク


スポンサーリンク

Select Caseステートメント

Select Caseを使うと、1つ目の条件に合致すると処理を実行して、条件に合わないと次の2つ目の条件に移ります。

2つ目の条件が合致すると実行、さらに条件に合わないと次の条件、3つ目に移るという具合です。

要するに、条件に合うまで次から次へと処理を行ってくれる便利なものです。

例えば、特定のセルの値が1ならば1枚印刷、2ならば2枚印刷・・・・とコードを書いた分実行してくれるのです。30枚まで設定しておけば、1から30までの条件を書き続ければ必要枚数を範囲内で自由に印刷できるようになります。

Select Caseステートメントを使ったVBAコードのイメージはこんな感じです。

Select Case 条件判断する特定のセルの値などの対象
Case 条件式1
対象が条件式1と合致する時の処理
Case 条件式2
対象が条件式2と合致する時の処理
・・・
・・・
・・・
End Select

実際に使っている2つのパターンを書いてみました。

印刷枚数を指定して印刷する

一番多く使っている方法なのですが、印刷したい枚数を半角数字でユーザーフォームのテキストボックスに入力してコマンドボタンを押すと必要枚数が印刷される簡単なフォームです。

詳しいExcel-VBAコードはVBAで印刷枚数を指定して印刷する方法に記載していますので、内容が重複する為にここでの説明は省きます。
印刷枚数を指定して印刷する方法」をご覧くださいませ。

80点以上なら合格(ランク)を付ける

selectcase
成績表などで80点以上なら「A」41点から70点は「B」40点以下は「C」とランクを付けることも可能です。

この場合条件に簡単な計算式を書いておけば可能なので、これも使用頻度が多い方ですね。

いつものようにユーザーフォームに配置したコマンドボタンを押すとセルC3の点数を判断してセルG3に評価を転記させるコードです。

Private Sub CommandButton1_Click()
Select Case Range(“C3”).Value
Case Is >= 80
Range(“G3”).Value = “A”
Case 41 To 79
Range(“G3”).Value = “B”
Case Is <= 40
Range(“G3”).Value = “C”
End Select
End Sub

  1. ユーザーフォームに配置したコマンドボタン(CommandButton1)を押すと
  2. Select Caseステートメントを使いセルC3の値を判断材料に下記の処理をする
  3. 80以上の時
  4. セルG3に「A」と記載する
  5. 41~79の時
  6. セルG3に「B」と記載する
  7. 40以下の時
  8. セルG3に「C」と記載する
  9. Select Caseステートメント終了
  10. マクロ終了

参考までに

上のコードのようにSelect CaseステートメントのCaseの後の計算式(比較演算子)はいくつかパターンがあります。

使用しているのは以上・間・以下を使っていますが、その他成績表の評価などで使ったことのあるものを書き出してみました。

VBAコードの書き方意味
Case 100100点の時(完全一致)
Case Is >= 8080点以上の時
Case Is > 8080点より大きい時(81点以上と同じ)
Case Is <= 4040点以下の時
Case Is < 4040点未満の時(39点以下と同じ)
Case 41 To 7941点以上79点以下
Case 0,””0点または空欄(未受験)