【VBA入門】Select Caseで複数の条件分岐(Or/To/Is/Likeも解説)

条件分岐が多い場合に便利 Select Caseステートメント

あなたはExcelVBAの複数の条件分岐で、Select Caseステートメントって使ってますか?

Select Caseステートメントは条件によって処理を分ける数が多い場合に使われます。例えばサイコロの目は1から6までありますが、1から6までの出た目でそれぞれ処理が違う場合などです。

この記事では、Select Caseステートメントについての基礎から、

  • Like演算子を使ったあいまい条件の使い方
  • Andで複数条件を指定する場合


など応用的な内容についても解説していきます!

目次

Select Caseとは(If文との使い分け)

Select Caseステートメントは複数の条件により処理を分岐させたい場合に使用します。

条件により処理を分岐させる構文としてIf文もありますが、If文は分岐の数が少ない場合に使用します。if文では分岐が多くなると読みにくくなるため、分岐の数が多い場合にSelect Caseステートメントが使われます。

if文についてはこちらの記事で詳しく解説しているので、詳しく知りたい方はぜひ確認してください。

Select Caseの使い方

文法と基本的な使い方

Select Caseステートメントは以下のように記述します。

Select Case 変数
    Case 条件式1
        処理1
    Case 条件式2
        処理2
    Case Else
        デフォルト(どの条件にも一致しなかった場合)の処理
End Select

変数が条件式と合致するか条件式がTrueの場合に、それ以降の処理を実行します。

条件式がFalseの場合は次の条件式に移ります。どのCaseの条件式にも当てはまらない場合は、Case Else以降の処理を実行します。

それではサンプルコードで確認していきましょう。

Sub macro1()
    Dim str As String
    
    str = "中学生"
    
    Select Case str
        Case "小学生"
            MsgBox "小学生です"
        Case "中学生"
            MsgBox "中学生です"
        Case "高校生"
            MsgBox "高校生です"
        Case Else
            MsgBox "入力が不正です"
    End Select
End Sub

実行結果:
SelectCase01

複数条件(Or)を指定する場合

Caseの条件式を複数指定することができます。複数の条件は以下のように「,」(カンマ)で区切ります。

Case 条件式1, 条件式2, ・・・

条件式のどれかを満たすと、それ以降の処理が実行されます。

サンプルコードで確認していきましょう。

Sub macro2()
    Dim age As Integer
    
    age = 14
    
    Select Case age
        Case 7, 8, 9, 10, 11, 12
            MsgBox "小学生です"
        Case 13, 14, 15
            MsgBox "中学生です"
        Case 16, 17, 18
            MsgBox "高校生です"
        Case Else
            MsgBox "入力が不正です"
    End Select
End Sub

実行結果:
SelectCase01

Toで範囲指定をする場合

Caseの条件式は以下のようにToキーワードを使って範囲を指定することもできます。

Case 下限値 To 上限値

サンプルコードで確認していきましょう。

Sub macro3()
    Dim age As Integer
    
    age = 14
    
    Select Case age
        Case 7 To 12
            MsgBox "小学生です"
        Case 13 To 15
            MsgBox "中学生です"
        Case 16 To 18
            MsgBox "高校生です"
        Case Else
            MsgBox "入力が不正です"
    End Select
End Sub

実行結果:
SelectCase01

Isで比較条件を指定する場合

Isキーワードを使って比較条件を指定することもできます。

Case Is < 値

サンプルコードで確認していきましょう。

Sub macro4()
    Dim age As Integer
    
    age = 5
    
    Select Case age
        Case Is < 7, Is > 18
            MsgBox "7から18までの整数を入力してください"
        Case 7 To 12
            MsgBox "小学生です"
        Case 13 To 15
            MsgBox "中学生です"
        Case 16 To 18
            MsgBox "高校生です"
        Case Else
            MsgBox "入力が不正です"
    End Select
End Sub

実行結果:
SelectCase02

Like演算子を使ったあいまい条件の使い方(ワイルドカード)

以下のようにLike演算子を使って部分的に合致した場合の条件分岐を記述することができます。

Select Case True
    Case 変数 Like 条件式1
        処理1
    Case 変数 Like 条件式2
        処理2
    Case Else
        デフォルト(どの条件にも一致しなかった場合)の処理
End Select

条件式には「*」(アスタリスク)などのワイルドカードを使います。ワイルドカードには以下のようなパターンを指定できます。

パターン説明
?任意の1文字
*任意の数の文字
#任意の1文字の数字(半角)
[charlist]リストcharlistに指定した文字の中の任意の1文字
[!charlist]リストcharlistに指定した文字以外の任意の1文字

サンプルコードで確認しましょう。

Sub macro5()
    Dim str As String
    
    str = "中学"
    
    Select Case True
        Case str Like "小*"
            MsgBox "小学生です"
        Case str Like "中*"
            MsgBox "中学生です"
        Case str Like "高*"
            MsgBox "高校生です"
        Case Else
            MsgBox "入力が不正です"
    End Select
End Sub

実行結果:
SelectCase01

このサンプルコードでは、String型変数strをLike演算子を使ってそれぞれの場合で比較しています。ワイルドカードを使った文字列”中*”とstrのパターンが一致しています。

Like演算子の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

Andで複数条件を指定する場合

Select caseステートメントについて複数条件で分岐する方法についてお伝えしてきました。

Or条件の場合は「,」記号を使ったり、範囲を指定する場合はToキーワードを使用します。また、文字列のパターンに合っているかどうかで条件分岐する場合はLike演算子を使います。

そこで、Andでの複数条件で条件分岐する方法がないか疑問に思かもしれません。しかし、そのような記述はありません。

1変数の数値の場合はToキーワードを使っての範囲指定で十分なので、Andで複数条件を指定する必要はありません。1変数の文字の場合はLike演算子でワイルドカード文字などを使ってパターンマッチングすればいいので、Andで複数条件を指定する必要はありません。

また、複数の変数をAnd条件で条件分岐することはSelect Caseステートメントではできません。もし、複数の変数で条件分岐したい場合ならIf文を使うようにしましょう

If文でのAndやOrなどの論理演算子の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

まとめ

ここでは、Select Caseステートメントについて説明しました。Select Caseステートメントは条件によって分岐が多い場合に使うと便利です。

使いこなすことができるように、この記事を何度も参考にして下さいね!

この記事を書いた人

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

目次