あなたは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
実行結果:
複数条件(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
実行結果:
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
実行結果:
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
実行結果:
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
実行結果:
このサンプルコードでは、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ステートメントは条件によって分岐が多い場合に使うと便利です。
使いこなすことができるように、この記事を何度も参考にして下さいね!