【マクロVBA】Select Caseで様々な条件・ケースの分岐処理!不等式やループの抜け方も紹介

条件分岐

IF Thenで条件分岐での処理はしたことがあるでしょうか。
IF Thenについての記事はこちらから☟

【マクロ・VBA知識 9】If …Thenで条件分岐・判別をする(○○なら△△) ► 独学エクセル塾 (dokugakuexcel.com)

Else If を使用すれば様々な条件・ケースの処理が可能になります。
しかし、複数の条件を組み合わせて多用すればVBAプログラムは複雑になってしまいます

そこでSelect Caseを使用すれば簡単で様々な条件・ケースにあった処理が可能になります。

ぜひ身に着けて活用してみてください。
それでは見ていきましょう。




■Select Caseの使用方法

Select Case 条件の対象

Case Is 条件①
   条件①の処理

Case Is 条件②
   条件②の処理

Case Is 条件③
   条件③の処理

・・・

End Select

■Select Caseを使用して条件分岐処理をする

では見本を元に説明していきます。
下図をご覧ください。今回は体温を入力して「高熱・発熱・微熱・平熱」を判断してみます。

条件として
①38.5℃以上は「高熱」
②38.0℃以上は「発熱」
③37.0℃以上は「微熱」
④36.9℃以下は「平熱」

の4段階を処理します。

ではまず、Select Caseを使用せず、ElseIfを使用してプログラムを作成してみました。

Sub 体温の判断①()

If Range(“C4”) >= 38.5 Then
Range(“C7”) = “高熱”

ElseIf Range(“C4”) >= 38 Then
Range(“C7”) = “発熱”

ElseIf Range(“C4”) >= 37 Then
Range(“C7”) = “微熱”

ElseIf Range(“C4”) <= 36.9 Then
Range(“C7”) = “平熱”
End If

End Sub

このプログラムでも求められる機能を満たすことは可能です。
しかし、毎回「Range(“C4”)」を入力して手間がかかるうえに
「ElseIf」が重なり、とても複雑で入力がめんどくさいプログラムになっていますね。

こちらをSelect Caseを使用してシンプルで簡潔なプログラムにしたいと思います。

ではSelect Caseの使用方法を振り返りましょう。

Select Case 条件の対象

Case Is 条件①
   条件①の処理

Case Is 条件②
   条件②の処理

Case Is 条件③
   条件③の処理

・・・

End Select

特徴として条件の対象を1度打ち込めばCase Ifでその対象を比較してくれます
つまり毎回「Range(“C4”)」を打ち込まなくても比較してくれるようになります。

さらにSelect Caseで宣言した後はEnd Selectで挟んでください

Select Caseを使用したプログラムはこのようになります。

Sub 体温の判断②SelectCaseの場合()

Select Case Range(“C4”)

Case Is >= 38.5
Range(“C7”) = “高熱”

Case Is >= 38
Range(“C7”) = “発熱”

Case Is >= 37
Range(“C7”) = “微熱”

Case Is <= 36.9
Range(“C7”) = “平熱”

End Select

End Sub

それでは実行してみましょう。
結果はこのようになります。

うまく機能してくれていますね。
プログラムもシンプルになりました
比較対象が1つの場合はSelect Caseを使用してみてください

■Select Caseを使用した応用機能

・比較演算子を使用しない条件分岐方法

先ほどは「>=」などの比較演算子の方法で条件分岐を行いましたが
比較演算子を使用しなくても条件分岐する方法があります。

先ほど発熱の範囲は38℃から38.4℃でした。
その際の条件分岐式は下記の要領で設定しましたね。

Case Is >= 38.5
Range(“C7”) = “高熱”

Case Is >= 38
Range(“C7”) = “発熱”

こちらで必然的に38℃から38.4℃は「発熱」となります。

では「○○~△△」と数値の範囲を設定したい時の簡単な方法をご紹介します
使用するのは「To」です。

Toの使用方法は 「Case ○○ To △△」のように使用します。
では先ほどの38℃から38.5℃は発熱という判別式を「To」で作成すると
下記のようになります。

Case 38 To 38.4
Range(“C7”) = “発熱”

ちなみにToを使用する際は「小さい数値 To 大きい数値」の順に入力しなければ
うまく条件分岐できないので注意が必要です。

・Caseで範囲を指定しない場合

これまで「>=」といった比較演算子や「To」を使用した範囲指定をしましたね。
では範囲指定しない場合を見てみましょう。

下図をご覧ください。

「36.5」℃の場合は「標準体温」と表記するようにしましょう
プログラムは単純です。

36.5で条件分岐をしたい場合は「Case 36.5」というように
数値のみ入力すれば「36.5」の時のみ条件分岐処理ができます

プログラムは下記の通りです。

Sub 体温の判断②SelectCaseの場合()

Select Case Range(“C4”)

Case 36.5
Range(“C7”) = “標準体温”

End Select

End Sub

・アルファベットの範囲指定

これまでの条件として数値の範囲で分岐させていましたが
アルファベットの範囲指定もSelect Caseでは可能になります。

下図をご覧ください。

評価が「AからC」の時は「合格」、「DからF」の時は「不合格」と
処理するプログラムを作成してみましょう

数値の時は「1から5」の場合は「1 To 5 」で範囲指定しましたよね。
考え方は同じで「AからC」のときは「”A” To “C”」となります。

プログラムはこのようになりました。

Sub SelectCaseでアルファベットの範囲指定()

Select Case Range(“C4”)

Case “A” To “C”
Range(“C7”) = “合格”

Case “D” To “F”
Range(“C7”) = “不合格”

End Select

End Sub

実行した結果はこのようになります。

うまく機能していますね。

■ループを抜き出す方法

ここではSelect Caseでループを抜け出す方法を紹介します。

使用するのはIf…Thenと呼ばれる条件分岐とGotoになります。

仕組みとしてはIf…Thenで指定した条件に当てはまるか確認し、

結果にあわせてGotoでプログラムを飛ばします。

詳しくは下記記事でまとめていますので参考にしてみてください☟

【マクロVBA知識 11】GoToでプログラムを指定した場所まで飛ばす方法について Excel ► 独学エクセル塾 (dokugakuexcel.com)

■公式の説明

わかりやすいように説明したため公式と使用する語句が異なりますが

マイクロソフト公式の説明については下記のリンクを参照してください。☟

Select Case ステートメント (VBA) | Microsoft Docs

■まとめ

いかがだったでしょうか。
IF Thenとは少し異なる条件分岐の処理だったと思います。

比較対象が1つの場合には確実にIFよりもSelect Caseの方が
簡単で作成しやすいですよね。

ぜひSelect CaseとIFを使い分けて活用してみてください。

それでは次回の記事でお会いしましょう。

次回の記事はこちらから☟

【マクロVBA知識 25】長くなったプログラムを改行・複数の行に分ける方法 ► 独学エクセル塾 (dokugakuexcel.com)

コメント