Select Case文を使った条件分岐
VBA では条件によって処理を分ける場合に If 文の他に Select Case 文が利用できます。 Select Case 文は 1 つの値を複数の値と比較して処理を分かる場合に便利です。ここでは Excel VBA で Select Case 文を使った条件分岐を行う方法について解説します。
(Last modified: )
Select Case文の使い方
Excel VBA で Select Case
文を使った条件分岐を行う方法です。書式は次の通りです。
Select Case 比較する値 Case 値1 比較する値が値1の時に行う処理 Case 値2 比較する値が値2の時に行う処理 Case 値3 比較する値が値3の時に行う処理 Case Else いずれの値とも一致しないときに行う処理 End Select
最初に Select Case
を記述し、そのあとに比較する値を記述します。そして Case
のあとに一致するかどうかを確認する値を記述していきます。比較する値がいずれかの値と一致した場合は、そのあとに記述された処理を実行します。いずれの値とも一致しなかった場合に処理を行いたい場合は Case Else
のあとに記述してください。 Case Else
は必要なければ省略できます。
なお VBA における Select Case
文では比較する値がいずれかの値と一致した場合、次の Case
までに書かれた処理を実行すると Select Case
文の次の処理へ処理が移ります。他のプログラミング言語のように break
を記述して Select Case
文を明示的に抜ける処理を記述する必要はありません。
次のサンプルではセル B2 の値をいくつかの値と比較して実行する処理を分けています。
Option Explicit Sub テスト() Select Case Range("B2").Value Case 3 MsgBox "満足しました" Case 2 MsgBox "どちらとも言えない" Case 1 MsgBox "不満があります" Case Else MsgBox "未回答" End Select End Sub
B2 セルの値が 1 または 2 または 3 と一致するかどうかを調べ、いずれかの値と一致した場合はそのあとに記載された処理を実行します。また 1 または 2 または 3 の値ではなかった場合は "未回答" と表示します。
それでは実際にプログラムを実行してみます。まずワークシートの B2 セルに 2 と入力しました。
先ほどのプログラムを実行します。
今回はセル B2 セルの値が 2 なので Case 2
のあとに記述された処理が実行され、ダイアログに "どちらとも言えない" と表示されました。
次にワークシートの B2 セルの値を空欄にしてから、再度プログラムを実行してみました。今度はいずれの値とも一致しないので Case Else
のあとに記述された処理が実行され、ダイアログに "未回答" と表示されました。
このように Select Case
文を使用することで、対象の値を複数の値と順に比較して一致する場合に処理を実行させることができます。
Select Case文とIf文について
Select Case
文を使って記述できるコードは If
文を使っても記述することができます。例えば先ほどのサンプルは If
文を使って次のように記述することができます。
Option Explicit Sub テスト() If Range("B2").Value = 3 Then MsgBox "満足しました" ElseIf Range("B2").Value = 2 Then MsgBox "どちらとも言えない" ElseIf Range("B2").Value = 1 Then MsgBox "不満があります" Else MsgBox "未回答" End If End Sub
このように Select Case
文で記述できるコードは If
文を使って書くことができます(逆に If
文で記述できるコードが必ず Select Case
で記述できるわけではありません)。
よって If
文だけを使ってもプログラムは記述できますが、あえて Select Case
を使用することで、一つの値を色々な値と比較していることがすぐに分かりますので、プログラムが分かりやすくなるメリットがあるのではと思います。
複数の値と比較したり指定した範囲と比較する
Select Case
文では、 Case
のあと比較する値と一致するかどうかを調べる値を記述しますが、実行する処理が同じであれば Case
のあとに複数の値を指定することができます。
複数の値を指定する場合はカンマ( ,
)で区切って複数の値を記述してください。例えば 3 または 5 または 7 のいずれかの値と一致した場合に同じ処理を行う場合は次のように記述します。
Select Case 比較する値 Case 3, 5, 7 比較する値が 3 または 5 または 7 の時に行う処理 Case 2, 4 比較する値が 2 または 4 の時に行う処理 End Select
比較する値が指定の範囲内かどうかを調べるには 下限値 To 上限値
の形式で記述します。例えば 4 以上 8 以下の数値だった場合に同じ処理を行う場合は次のように記述します。この時、範囲の両端の値 1 と 値 2 と同じ場合も含みます。
Select Case 比較する値 Case 4 To 8 比較する値が 4 以上 8 以下の範囲の時に行う処理 End Select
範囲ではなく指定した値よりも大きいまたは小さいかどうかを調べるには、 Is
と比較演算子を使用して Is > 値
や Is <= 値
のように記述します。例えば 8 以上の場合に同じ処理を行うには次のように記述します。
Select Case 比較する値 Case Is >= 8 比較する値が 8 以上の時に行う処理 Case IS < 4 比較する値が 4 より小さい時に行う処理 End Select
カンマ( ,
)と範囲指定や比較演算子を組み合わせることもできます。例えば値が 4 以上 8 以下、または 12 よりも大きい場合に同じ処理を行うには次のように記述します。
Select Case 比較する値 Case 4 To 8, Is > 12 比較する値が 4 以上 8 以下の範囲、 または 12 より大きい時に行う処理 End Select
それでは簡単なサンプルを作成して試してみます。
Option Explicit Sub テスト() Select Case Range("B2").Value Case 1, 3, 5, 7, 9 MsgBox "奇数です" Case 2, 4, 6, 8 MsgBox "偶数です" Case Is > 9, Is < 1 MsgBox "範囲外の値です" End Select End Sub
B2 セルの値が奇数か偶数かを調べ、一致した場合はそのあとに記載された処理を実行します。また 9 より大きいまたは 1 より小さい場合は "範囲外の値です" と表示します。
それでは実際にプログラムを実行してみます。まずワークシートの B2 セルに 7 と入力しました。
先ほどのプログラムを実行します。
今回はセル B2 セルの値が 7 なので Case 1, 3, 5, 7, 9
のあとに記述された処理が実行され、ダイアログに "奇数です" と表示されました。
次にワークシートの B2 セルの値を 15 にしてから、再度プログラムを実行してみました。今度は Case Is > 9, Is < 1
のあとに記述された処理が実行され、ダイアログに "範囲外の値です" と表示されました。
-- --
Excel VBA で Select Case 文を使った条件分岐を行う方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。