サイトについて      連絡先   検索

VBA Select 文

はじめに

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

If 文に比べて、簡単な入力で複数の条件で分岐できます。

Case 条件を追加していくらでも条件を増やせます。

  • 目次
    • Select Case 値
    • Select Case True

Select Case 値

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


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

比較値には、次のような指定ができます。


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

To を使った文字列の比較

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") ' 0、先頭の 3 文字が BBB ~ BBC 未満なら何文字でも条件を満たす
End Select

このため To を使用するときは、数値に限定した方がいいです。

Select Case True

これは「Select Case 値」と同じものです。値に True を指定することで、複数の変数を条件に指定できます。

Select Case Trueのように入力し、改行してEnd Selectを入力します。その中にCase 条件を入力します。条件を満たすときに、その Case の処理が実行されます。


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

条件には、次のような指定ができます。


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 ("1") ' i が 20 より大きい または s が found のとき

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

Select Case Trueの True は条件が True のときに、その Case の処理を実行します。

Select Case Falseのようにも入力でき、そのときは条件が False のときに処理を実行します。ただし、わかりずらいので True のみ使用します。

  • 目次
    • Select Case 値
    • Select Case True