この記事では、VBAでの条件分岐に使用する、Select Case ステートメントの使用方法を解説します。
OR条件・AND条件を使った複数条件や、Like演算子を使った文字列比較条件などの記述方法を解説します。
また、条件判定に True を使用する方法などの注意点を解説していきます。
*Select Case ステートメントはSelect Case 文とも呼ばれますが、この記事ではSelect Case と表記します。
VBA関連解説
Select Case の構文
VBAでは、条件によって処理を変えたい場合に、Ifステートメントがよく使用されます。
中でも、複数の条件に対応した If_Then_ElseIf_Else構文は、さまざまな条件に対応できるのですが、可読性に欠けるのが難点です。
If_Then_ElseIf_Else 構文
If 条件1 Then 条件1が真の時の処理1 ElseIf 条件2 Then 条件2が真の時の処理2 ElseIf 条件3 Then 条件3が真の時の処理3 ElseIf 条件4 Then 条件4が真の時の処理4 Else 条件1・2・3・4が偽の時の処理5 End If
そこで、Select Case を使うと、Ifステートメント同様の条件が、シンプルな構文で記述できます。複数条件で、条件数が多いときは、Select Case を使用するのがおすすめです。
Select Case_Case_Else 構文
Select Case 値 Case 条件1 条件1が真の時の処理1 Case 条件2 条件2が真の時の処理2 Case 条件3 条件3が真の時の処理3 Case 条件4 条件4が真の時の処理4 Case Else 条件1・2・3・4が偽の時の処理5 End Select
また、Select Case は、その条件の設定方法により記述方法が変わりますので、基本構文から各種条件の記述方法まで、例示しながら解説していきます。
基本構文
複数の条件を判定し、真:True の時にそれぞれの処理を実行します。さらに、偽:False の時に別の処理を実行します。
Case の後に条件を追加していきます。Case Else の後に偽の時の処理を書きます。
Select Case_Case_Else 構文
Select Case 判定用変数 Case 条件1 条件1が真の時の処理1 Case 条件2 条件2が真の時の処理2 Case 条件3 条件3が真の時の処理3 Case 条件4 条件4が真の時の処理4 Case Else すべての条件が偽の時の処理5 End Select
Select Case_Case_Else 例
Dim num as Long num = 3 Select Case num Case 1 MsgBox "数は1です。" Case 2 MsgBox "数は2です。" Case 3 MsgBox "数は3です。" Case 4 MsgBox "数は4です。" Case Else MsgBox "数は1・2・3・4ではありません。" End Select
"数は3です。" が表示されます。
条件:複数条件(OR条件)
Select Case はCase に複数の条件を記述することができます。
Case条件は、" , " (カンマ)で区切ると、Or条件として記述できます。
Select Case_Case Or_Else 構文
Select Case 判定用変数 Case 条件1 , 条件2 条件1 または 条件2が真の時の処理1 Case 条件3 , 条件4 条件3 または 条件4が真の時の処理2 Case 条件5 , 条件6 条件5 または 条件6が真の時の処理3 Case 条件7 , 条件8 条件7 または 条件8が真の時の処理4 Case Else すべての条件が偽の時の処理5 End Select
Select Case_Case Or_Else 例
Dim num as Long num = 3 Select Case num Case 1,2 MsgBox "数は1または2です。" Case 3,4 MsgBox "数は3または4です。" Case 5,6 MsgBox "数は5または6です。" Case 7,8 MsgBox "数は7または8です。" Case Else MsgBox "数は 12345678 ではありません。" End Select
"数は3または4です。" が表示されます。
条件:複数条件(AND条件)*
Select Case はCase に複数の条件を記述することができます。
Case条件は、"条件 And 条件" を追加すると、And条件として記述できます。
また、Select Case の後に、True を記述することも忘れないでください。
Select Case_Case And_Else 構文
Select Case True Case 条件1 And 条件2 条件1 かつ 条件2が真の時の処理1 Case 条件3 And 条件4 条件3 かつ 条件4が真の時の処理1 Case 条件5 And 条件6 条件5 かつ 条件6が真の時の処理1 Case 条件7 And 条件8 条件7 かつ 条件8が真の時の処理1 Case Else すべての条件が偽の時の処理5 End Select
Select Case_Case And_Else 例
Dim num As Long num = 30 Select Case True Case num >= 1 And num <= 10 MsgBox "数は1 から10 の範囲内です。" Case num >= 11 And num <= 20 MsgBox "数は11 から20 の範囲内です。" Case num >= 21 And num <= 30 MsgBox "数は21 から30 の範囲内です。" Case num >= 31 And num <= 40 MsgBox "数は31 から40 の範囲内です。" Case Else MsgBox "数は1 から40 の範囲にはありません。" End Select
"数は21 から30 の範囲内です。" が表示されます。
条件:範囲指定(TO条件)
Select Case はCase に範囲指定の条件を記述することができます。
Case条件は、"To 終端" を追加すると、範囲指定条件として記述できます。
Select Case_Case To_Else 構文
Select Case 判定用変数 Case 条件1 To 条件2 条件1から条件2の範囲で真の時の処理1 Case 条件3 To 条件4 条件3から条件4の範囲で真の時の処理2 Case 条件5 To 条件6 条件5から条件6の範囲で真の時の処理3 Case 条件7 To 条件8 条件7から条件8の範囲で真の時の処理4 Case Else すべての条件が偽の時の処理5 End Select
Select Case_Case To_Else 例
Dim num as Long num = 30 Select Case num Case 1 To 10 MsgBox "数は1 から10 の範囲内です。" Case 11 To 20 MsgBox "数は11 から20 の範囲内です。" Case 21 To 30 MsgBox "数は21 から30 の範囲内です。" Case 31 To 40 MsgBox "数は31 から40 の範囲内です。" Case Else MsgBox "数は1 から40 の範囲にはありません。" End Select
"数は21 から30 の範囲内です。" が表示されます。
条件:比較条件(IS条件)
Select Case はCase に比較演算子を使用した条件を記述することができます。
Case条件は、"Is 比較演算子" を追加すると、比較条件として記述できます。
Select Case_Case Is_Else 構文
Select Case 判定用変数 Case Is 比較演算子 条件1 条件1が真の時の処理1 Case Is 比較演算子 条件2 条件2が真の時の処理2 Case Is 比較演算子 条件3 条件3が真の時の処理3 Case Is 比較演算子 条件4 条件4が真の時の処理4 Case Else すべての条件が偽の時の処理5 End Select
Select Case_Case Is_Else 例
Dim num As Long num = 30 Select Case num Case Is <= 10 MsgBox "数は1 から10 の範囲内です。" Case Is <= 20 MsgBox "数は11 から20 の範囲内です。" Case Is <= 30 MsgBox "数は21 から30 の範囲内です。" Case Is <= 40 MsgBox "数は31 から40 の範囲内です。" Case Else MsgBox "数は1 から40 の範囲にはありません。" End Select
"数は21 から30 の範囲内です。" が表示されます。
条件:あいまい条件(LIKE条件)*
Select Case はCase にLike演算子を使用した条件を記述することができます。
Case条件は、"判定用変数 Like 条件" を追加すると、あいまい条件として記述できます。
また、Select Case の後に、True を記述することも忘れないでください。
Select Case_Case Like_Else 構文
Select Case True Case 判定用変数 Like 条件1 条件1が真の時の処理1 Case 判定用変数 Like 条件2 条件2が真の時の処理2 Case 判定用変数 Like 条件3 条件3が真の時の処理3 Case 判定用変数 Like 条件4 条件4が真の時の処理4 Case Else すべての条件が偽の時の処理5 End Select
Select Case_Case Like_Else 例
Dim str As String str = "いちご" Select Case True Case str Like "あ*" MsgBox str & "は, あ で始まります。" Case str Like "い*" MsgBox str & "は, い で始まります。" Case str Like "う*" MsgBox str & "は, う で始まります。" Case str Like "え*" MsgBox str & "は, え で始まります。" Case Else MsgBox str & "は, あいうえ で始まりません。" End Select
"いちごは, い で始まります。" が表示されます。
注意点等
ここまで、Select Caseステートメントの構文を例示しながら解説してきました。
ここから、詳細にわたり注意点等を確認していきます。
条件分岐の優先順位
Select CaseステートメントはCase条件を順番に判定していきます。
複数の条件に合致する場合は、最初に合致したCase条件に続く処理を実行し、ステートメントを抜けます。合致する条件がない場合は、Case Elseの処理を実行します。Case Elseは省略可能ですが、異常値を処理するために記述しておきましょう。
最も特徴的なのが、最初に合致した条件のみ実行されることです。
比較条件の構文例では、この特性を利用して記述しています。" num = 1 " を指定すると、全てのCase条件に合致していますが、最初に合致した "< 10 " の条件を実行し、ステートメントを抜けています。
AND条件・あいまい条件
基本のSelect Caseステートメントには、AND条件やあいまい条件がありません。
そこで、Case条件をBoolean型の判定にして、Select Case の後の判定用変数(値・文字列)をTrue にすることにより条件分岐を実行しています。これは特殊な書き方ですが、Case条件をTrue判定/False判定にしたり、判定用変数をTrue/Falseにしたりすると複雑な判定も可能となります。
ただし、Select Caseステートメントの特徴の1つのコードの可読性の良さがなくなってしまいます。
コードの可読性の良さを保つには、次のような対応がいいでしょう。
AND条件は、判定用変数が数値の場合、構文例からも解るように、コードのシンプルな To条件に置き換えます。
さらに複雑な条件分岐は、Ifステートメントを利用することをおすすめします。
下記の記事では、VBAでの条件分岐に使用する、Ifステートメントの使用方法を解説していますので、参考にしてください。
演算子
Select Caseステートメントの構文例ででてきた、"<=" や "Like" などは演算子とよばれ、値の比較などに使われます。
演算子には、"=" "<" などの比較演算子、その他、算術演算子や論理演算子、文字列比較に使われるLike演算子などがあります。
演算子の詳細は下記の記事で解説していますので、記事を参考に演算子の使い方を理解して、さまざまな条件を設定できるようになりましょう。
概要解説に戻る