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 と入力しました。

Select Case文の使い方(1)

先ほどのプログラムを実行します。

Select Case文の使い方(2)

今回はセル B2 セルの値が 2 なので Case 2 のあとに記述された処理が実行され、ダイアログに "どちらとも言えない" と表示されました。

Select Case文の使い方(3)

次にワークシートの B2 セルの値を空欄にしてから、再度プログラムを実行してみました。今度はいずれの値とも一致しないので Case Else のあとに記述された処理が実行され、ダイアログに "未回答" と表示されました。

Select Case文の使い方(4)

このように 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 と入力しました。

複数の値と比較したり指定した範囲と比較する(1)

先ほどのプログラムを実行します。

複数の値と比較したり指定した範囲と比較する(2)

今回はセル B2 セルの値が 7 なので Case 1, 3, 5, 7, 9 のあとに記述された処理が実行され、ダイアログに "奇数です" と表示されました。

複数の値と比較したり指定した範囲と比較する(3)

次にワークシートの B2 セルの値を 15 にしてから、再度プログラムを実行してみました。今度は Case Is > 9, Is < 1 のあとに記述された処理が実行され、ダイアログに "範囲外の値です" と表示されました。

複数の値と比較したり指定した範囲と比較する(4)

-- --

Excel VBA で Select Case 文を使った条件分岐を行う方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。