更新日:、 作成日:
VBA Select 文で複数に分岐する
はじめに
Excel VBA マクロの Select 文で複数に分岐する方法を紹介します。
Select Case 値 のようにして、条件分岐する値を指定できます。
Case 比較値 のようにして、その値と等しいときの処理ができます。
Case Else のようにして、すべての条件と一致しないときの処理ができます。
Select Case True のようにして、比較値に条件を入力できます。Select Case 文字列 のように、文字列を条件にしたいときは、これを使用します。
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 を入力し、改行して 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