VBA Select 文で複数に分岐する

はじめに

Excel VBA マクロの Select 文で複数に分岐する方法を紹介します。

Select Case 値 のようにして、条件分岐する値を指定できます。

Case 比較値 のようにして、その値と等しいときの処理ができます。

Case Else のようにして、すべての条件と一致しないときの処理ができます。

Select Case True のようにして、比較値に条件を入力できます。Select Case 文字列 のように、文字列を条件にしたいときは、これを使用します。

If 文を使用して条件分岐するには「If 文」をご覧ください。
  • 目次
    • Select Case 値
    • Select Case True

Select Case 値

Select Case 値 のように入力し、改行して End Select を入力します。

Select の中に Case 比較値 を入力します。値が比較値と同じときに、その Case の処理が実行されます。

Select Case 0 ' この値が
Case 0
    Debug.Print("0") ' 0 のとき
Case 1
    Debug.Print("1") ' 1 のとき
End Select

Case の比較値には、次のように条件を入力できます。

  • 比較値:比較値と等しいとき。
  • 最小値 To 最大値:数値の範囲内のとき。左側に小さい値を、右側に大きい値を指定します。
  • Is 比較演算子 比較値:比較演算子を使用して条件を入力します。この比較演算子に Like と Is は使用できません。
  • ,:上記の条件を Or で複数条件にします。
  • Else:すべての条件と一致しないとき。
Dim i As Integer

Select Case i
Case 0
    Debug.Print("0") ' i が 0 のとき

Case 1 To 3
    Debug.Print("1") ' i が 1 ~ 3 のとき

Case Is >= 4
    Debug.Print("2") ' i が 4 以上のとき

Case 0, 2 To 3, Is > 5
    Debug.Print("3") ' i が 0「または」2 ~ 3「または」5 より大きいとき

Case Else
    Debug.Print("4") ' それ以外のとき
End Select

Select Case 文字列

To を使って文字列の範囲も指定できます。大文字より小文字が大きい値として扱われます。大文字が何文字あっても小文字 1 文字より小さい値です。

Dim s As String
s = "ABC"

Select Case s
Case "AAA" To "ZZZ"
    Debug.Print("0") ' 大文字 3 文字のとき

Case "aaa" To "zzz"
    Debug.Print("1") ' 小文字 3 文字のとき

Case "AAA" To "zzz"
    Debug.Print("2") ' 大文字小文字を区別しないで 3 文字のとき

Case "A" To "zzz"
    Debug.Print("3") ' 大文字小文字を区別しないで 1 ~ 3 文字のとき
End Select

注意として先頭の文字から判定されるので、実際には上記のような文字数を指定することはできません。 BBB… の文字は BBB より大きく BBC より小さい値として扱われます。

Dim s As String
s = "BBBA"

Select Case s
Case "BBB" To "BBC"
    Debug.Print("0") ' 先頭の 3 文字が BBB ~ BBC なら何文字でも条件に一致する
End Select

このため To で文字列を指定するときは正確に判定できません。そこで次の「Select Case True」を使用します。

Select Case True

これは「Select Case 値」と同じものです。値に True を指定して比較値が True になる条件を指定できます。

Select Case True を入力し、改行して End Select を入力します。

Select の中に Case 条件 を入力します。条件の結果が True か False になればどんな条件でも入力できます。

Select Case True
Case 0 = 0
    Debug.Print("0") ' 0 が 0 と等しいとき
Case 1 > 0
    Debug.Print("1") ' 1 が 0 より大きいとき
End Select

If 文」で条件を入力するのと同じように比較演算子を使用したり、論理演算子を使用して複数条件にもできます。

Dim i As Integer
i = 10
Dim s As String
s = "Tips"

Select Case True
Case i >= 10
    Debug.Print("0") ' i が 10 以上のとき

Case s = "Tips"
    Debug.Print("1") ' s が Tips のとき

Case i > 20, s = "found"
    Debug.Print("2") ' i が 20 より大きい「または」s が found のとき

Case (i > 20) Or (s = "found")
    Debug.Print("2") ' i が 20 より大きい「または」s が found のとき
    
Case (i >= 0) And (i <= 20)
    Debug.Print("2") ' i が 0 以上「かつ」20 以下のとき

Case Else
    Debug.Print("4") ' それ以外のとき
End Select

Select Case False のようにも入力できますが、わかりずらいので True を使用します。

Select Case 文字列

好きなように条件を入力できるので、そのまま比較したり「StrComp 関数」を使用して比較したり、Like 演算子を使用できます。

Select Case True
Case "ABC" = "abc"
    Debug.Print("0") ' 等しい

Case "ABC" > "abc"
    Debug.Print("1") ' より大きい

Case StrComp("ABC", "abc", vbTextCompare) = 0
    Debug.Print("2") ' 大文字小文字を区別しないで等しい
    
Case StrComp("AAA", "BBB", vbTextCompare) <= 0
    Debug.Print("2") ' 大文字小文字を区別しないで以下

Case "あいうえお" Like "あい*"
    Debug.Print("3") ' "あい" で始まるとき

Case "AZZ" Like "[A-C]*"
    Debug.Print("4") ' A ~ C の文字で始まるとき
End Select
文字列の比較について詳しくは「文字列を比較する」をご覧ください。