If文が多くなると、コードが読みにくくなってしまう——そんな経験はありませんか?
VBAである程度のコーディング経験がある方なら、「保守性」や「可読性」の重要性を日々実感していることでしょう。
そこで活躍するのが、Select Case ステートメントです。
複雑な条件分岐も、Select Case ステートメントを使えば条件が整理され、意図の明確な読みやすいコードに改善できます。
本記事では、VBAにおける条件分岐に活用できる Select Case ステートメントの使い方を詳しく解説します。
OR条件・AND条件を用いた複数条件の記述方法や、Like演算子による文字列比較、さらに条件判定に True を用いる際の注意点など、実践的なポイントも取り上げます。
Select Case ステートメントの活用術をしっかりと押さえて、コードの可読性と保守性を高めましょう。
※なお、Select Case ステートメントは「Select Case 文」と呼ばれることもありますが、本記事では「Select Case」と表記を統一しています。
VBA技術解説
Select Caseとは?Ifステートメントとの違いとメリット
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ステートメントと同様の条件分岐が、よりシンプルで視認性の高い構文で記述できます。特に、判定対象が単一の変数であり、条件数が多い場合には、Ifステートメントよりも構造が整理されており、処理の流れを一目で把握することが可能です。
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は、判定用の変数を一度だけ指定することで、各条件式を簡略化できる構造が特徴です。これにより、コード全体がすっきりとまとまり、読みやすさが向上します。
VBAにおいて、Select Case構文は条件分岐を明快かつ効率的に記述できる点で非常に有用です。条件の追加や変更も容易で、保守性が高く、将来的な拡張にも柔軟に対応できます。また、数値の範囲指定や複数の値を並列に記述できるため、実務での複雑なロジックにも対応可能です。
さらに、Select Caseは条件の指定方法によって書き方が異なるため、基本構文から応用的な記述方法まで、具体例を交えながら詳しく解説していきます。
Select Case の基本的な条件記述方法
基本構文
基本構文は、複数の条件を判定し、条件が真(True)の場合に、それぞれ対応する処理を実行することができます。 さらに、すべての条件が偽(False)の場合には、Case Else を使って別の処理を実行できます。
条件指定は、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です。" が表示されます。

条件分岐の優先順位
Select Case ステートメントでは、各Case条件を上から順番に判定していきます。 複数の条件に一致する場合は、最初に一致したCase条件の処理を実行した時点でステートメントを終了します。 条件がひとつも一致しなかった場合は、Case Else の処理が実行されます。
Case Else は省略可能ですが、予期せぬ値(異常値)への備えとして、記述しておくことを推奨します。
Select Case で最も特徴的なのが、最初に合致したCase条件のみが実行されることです。
以下のコードでは、変数 num = 3 と指定した場合、Case Is >=3・Case Is >=2・Case Is >=1 の3つに一致しています。 ですが、最初に一致する Case Is >=3 の処理だけが実行され、それ以降はスキップされステートメントを終了します。
Select Case_Case Is_Else 例
Dim num as Long num = 3 Select Case num Case Is >=4 MsgBox "数は4以上です。" Case Is >=3 MsgBox "数は3以上です。" Case Is >=2 MsgBox "数は2以上です。" Case Is >=1 MsgBox "数は1以上です。" Case Else MsgBox "数は1より小さいです。" End Select
このように、Select Case を使った複数分岐では、意図しない処理が実行されないよう、判定順と条件設計に注意する必要があります。 また、条件の並び順や冗長な記述が処理速度に影響する場合もあるため、ロジックはできる限りシンプルかつ明確に構成しましょう。
Select Case の様々な条件記述方法
条件:複数条件(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です。" が表示されます。

条件:範囲指定(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 の範囲内です。" が表示されます。

演算子について
Select Caseステートメントの構文例ででてきた、"=" や "<" などは演算子とよばれ、値の比較などに使われます。
演算子には、"=" "<" などの比較演算子、その他、算術演算子や論理演算子、文字列比較に使われるLike演算子などがあります。
演算子の詳細は下記の記事で解説していますので、記事を参考に演算子の使い方を理解して、さまざまな条件を設定できるようになりましょう。
Select Case の特殊な条件記述方法
条件:複数条件(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 の範囲内です。" が表示されます。

条件:あいまい条件(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ステートメントは、AND条件やあいまい条件に直接対応していません。
そこで、Case条件をBoolean型の判定にして、Select Case の後の判定用変数(値・文字列)をTrue にすることにより条件分岐を実行しています。
これは特殊な書き方ですが、Case条件をTrue判定/False判定にしたり、判定用変数をTrue/Falseにしたりすることで、複雑な判定も可能となります。
ただし、Select Case ステートメントの特徴のひとつである、判定用変数を一度指定することで条件式を簡略化できる構造は、特殊な書き方をすると損なわれてしまいます。 Select Case True のような記述により複雑な条件分岐が可能になりますが、本来の可読性や明確さが低下する可能性があるため注意が必要です。
例えば、次のようなSelect Case Trueを使ったコードを、If_Then_ElseIf_Else構文を使ったコードと比較してみると、Ifステートメントの方が構文的に素直で、条件ごとの流れが明確である分、可読性・保守性に優れると言えるでしょう。
Dim Score As Long Score = 75 Select Case True Case Score >= 90 MsgBox "評価: A" Case Score >= 80 MsgBox "評価: B" Case Score >= 70 MsgBox "評価: C" Case Else MsgBox "評価: D" End Select
Dim Score As Long Score = 75 If Score >= 90 Then MsgBox "評価: A" ElseIf Score >= 80 Then MsgBox "評価: B" ElseIf Score >= 70 Then MsgBox "評価: C" Else MsgBox "評価: D" End If
コードの可読性の良さを保つには、次のような対応がいいでしょう。
AND条件は、判定用変数が数値の場合、可能であれば、コードのシンプルな To条件に置き換えます。
さらに複雑な条件分岐は、Ifステートメントを使用することを推奨します。
下記の記事では、VBAでの条件分岐に使用する、Ifステートメントの使用方法を解説していますので、参考にしてください。
技術解説まとめに戻る