VBAで条件分岐を書くとき、「同じ処理を複数の条件で実行したい」と思ったことはありませんか。
例えば、「営業」「営業一課」「営業二課」のように、異なる値であっても同じ処理を実行したいケースは実務でよくあります。このような場合にIf文を何度も書いてしまうと、コードが長くなるだけでなく、条件の追加や修正もしにくくなります。
Select Caseでは、1つのCaseに複数の条件を指定できるため、コードを整理しながら保守性を高めることが可能です。
この記事では、Select Caseで複数条件を指定する基本的な書き方から、実務で再利用しやすいコード設計まで詳しく解説します。
✅ Select Caseで複数条件を指定する基本
複数の条件が同じ処理になる場合は、Caseを増やすのではなく、1つのCaseへまとめて記述するとコードが読みやすくなります。
実務では、部署名・商品カテゴリ・ステータスなど、「複数の値を同じグループとして扱いたい」ケースが非常に多くあります。そのため、最初から保守性を考えた書き方を身に付けておくことが重要です。
まずは、基本構文を確認してみましょう。
・複数条件を指定する基本構文
複数の値を同じ処理へまとめる場合は、カンマ(,)で区切って指定します。
Select Case 判定する値
Case "条件1", "条件2", "条件3"
実行する処理
Case "条件4"
実行する処理
Case Else
上記以外の処理
End Select
このように記述すると、「条件1」「条件2」「条件3」のいずれかに一致した場合、同じ処理が実行されます。
・複数条件を判定するサンプル
実務では、「営業」「営業一課」「営業二課」のように名称は異なっていても、同じ処理を行いたいケースがよくあります。
このような場合にIf文を繰り返すよりも、Select Caseでまとめて判定する方が可読性が高く、条件追加にも対応しやすくなります。
次のサンプルでは、営業部門と管理部門をグループ化して処理を切り替える方法を紹介します。
・保守性を意識した実務向けコード
Sub ProcessDepartment()
' 判定対象となる部署名
Dim departmentName As String
departmentName = Range("A2").Value
Select Case departmentName
' 営業部門
Case "営業", "営業一課", "営業二課"
MsgBox "営業部門の処理を実行します。"
' 管理部門
Case "経理", "総務"
MsgBox "管理部門の処理を実行します。"
Case Else
MsgBox "対象外の部署です。"
End Select
End Sub
・なぜこの書き方が実務で使いやすいのか
同じ処理を行う条件をまとめることで、コード全体の見通しが良くなります。
例えば、営業部門が増えた場合も、
Case "営業", "営業一課", "営業二課", "営業三課"
のように1か所修正するだけで対応できます。
一方、If文で同じ処理を書いている場合は、条件を追加するたびにコードが長くなり、修正漏れの原因にもなります。
また、判定対象をdepartmentNameという変数へ格納しているため、後からセルではなくCSVやInputBoxなどから取得する仕様へ変更しても、修正箇所を最小限に抑えられます。
✅ Caseを分ける場合とまとめる場合の使い分け
Select Caseでは、すべての条件をまとめれば良いというわけではありません。
同じ処理ならまとめるべきですが、処理内容が少しでも異なる場合はCaseを分けた方が保守しやすくなります。
ここでは、実務での判断基準を紹介します。
・処理が同じならCaseをまとめる
例えば、
- 営業
- 営業一課
- 営業二課
すべてで同じ処理を行うなら、1つのCaseへまとめる方が読みやすくなります。
コード量も減り、条件追加にも対応しやすくなります。
・処理が異なるならCaseを分ける
例えば、
- 営業部はメール送信
- 経理部は請求書作成
- 総務部は備品管理
のように処理内容が異なる場合は、それぞれCaseを分ける方が保守しやすくなります。
無理に1つへまとめると、内部でさらにIf文を書くことになり、かえって複雑になるため注意しましょう。
条件数が少ない場合や処理内容が異なる場合は、If文やElseIfの方が適しているケースもあります。ElseIfを使った複数条件の設計について詳しく知りたい方は、「【VBA】IF文のElseIfを用いた複数条件|ネストを防ぎ実務で壊れない条件分岐を書く方法」も参考にしてください。
✅ 判定する値は変数へ格納してから使う
「セルの値をそのままSelect Caseへ書けばよいのでは?」と思う方もいるかもしれません。
確かに動作はしますが、実務では変数へ格納してから判定することをおすすめします。
その方が仕様変更への対応が容易になるためです。
・セルを直接判定する例
Select Case Range("A2").Value
この書き方でも動作します。
しかし、取得元が変わるたびにコードを修正する必要があります。
・変数へ格納する実務向け設計
Dim departmentName As String
departmentName = Range("A2").Value
Select Case departmentName
このようにしておけば、
- セル
- CSV
- UserForm
- データベース
などへ変更する場合でも、修正するのは値を取得する部分だけです。
判定処理はそのまま利用できるため、再利用性も高くなります。
✅ 数値と文字列を組み合わせて条件分岐する方法
実務では、文字列だけ、数値だけを判定するケースよりも、データの種類に応じて複数の値をグループ化して処理する場面が多くあります。
例えば、ステータスコードや評価ランクなどでは、複数の数値を同じ処理へまとめたいこともあります。
Select Caseでは、文字列だけでなく数値でも同じように複数条件を指定できます。
・数値をまとめて判定するサンプル
例えば、テスト結果や資格試験、社員評価などで、点数ごとに処理内容を切り替えたいケースを考えてみましょう。
「80・90・100点は合格」「60・70点は再試験」のように、複数の数値を同じグループとして扱う場面は実務でもよくあります。このような場合にIf文で条件を並べるよりも、Select Caseでまとめて判定する方がコードの見通しが良くなり、評価基準が変更された際にも修正しやすくなります。
次のサンプルでは、評価点数をグループごとに判定して処理を切り替える方法を紹介します。
・保守性を意識した実務向けコード
Sub ProcessEvaluation()
' 判定対象となる評価点数
Dim evaluationScore As Integer
evaluationScore = Range("A2").Value
Select Case evaluationScore
' 合格ライン
Case 80, 90, 100
MsgBox "合格です。"
' 再試験対象
Case 60, 70
MsgBox "再試験です。"
Case Else
MsgBox "不合格です。"
End Select
End Sub
・この書き方を採用する理由
数値でも文字列と同様に、同じ処理を行う値は1つのCaseへまとめることでコードが整理されます。
例えば評価基準が変更された場合でも、
Case 80, 85, 90, 95, 100
のようにCaseだけ修正すれば済みます。
If文で複数条件を書き続けるよりも、修正箇所が少なく保守性も高くなります。
範囲判定や数値比較をより柔軟に行いたい場合は、比較演算子を使った条件分岐も覚えておくと便利です。「【VBA】比較演算子を用いた複数条件の使用方法|実務で迷わない条件分岐の設計」で詳しく解説しています。
✅ Case Isや範囲指定と組み合わせる方法
複数条件だけでなく、「80点以上」や「10未満」といった範囲で判定したいこともあります。
そのような場合は、Case IsやToを利用するとシンプルに記述できます。
・範囲指定を利用するサンプル
実務では、「80点以上なら合格」「60~79点なら再試験」のように、特定の値ではなく数値の範囲で処理を分岐したいケースが多くあります。
売上金額によるランク分けや在庫数による発注判定なども同じ考え方で実装できます。このような条件をIf文で記述すると比較演算子が増えて見通しが悪くなりがちですが、Select CaseのCase IsやToを利用すると、判定条件を整理しながら分かりやすく記述できます。
次のサンプルでは、点数を範囲ごとに判定して処理を切り替える方法を紹介します。
・実務向けコード
Sub CheckScore()
' 判定対象の点数
Dim score As Integer
score = Range("A2").Value
Select Case score
Case Is >= 80
MsgBox "合格"
Case 60 To 79
MsgBox "再試験"
Case Else
MsgBox "不合格"
End Select
End Sub
・実務ではこの書き方が便利な理由
例えば、
- 売上金額
- 在庫数
- 評価点数
- 年齢
などは範囲で判定するケースがほとんどです。
If文でも実装できますが、
If score >= 80 Then
を何度も書くより、Select Caseの方が条件全体を一覧で把握しやすくなります。
数値の範囲だけでなく、複数の条件を組み合わせて判定したい場合は、ANDやORを利用するケースもあります。「【VBA】IF文のandとorを組み合わせた複数条件|実務で迷わない条件設計」もあわせてご覧ください。
✅ Case Elseを活用した安全な設計
Select Caseを書く際に、Case Elseを省略してしまう方もいます。
しかし、実務ではCase Elseを必ず用意することをおすすめします。
・Case Elseが必要な理由
運用開始後は、
- 新しい部署が追加される
- CSVの内容が変更される
- 入力ミスが発生する
- 想定外のデータが入る
といったことが珍しくありません。
Case Elseがないと、該当するCaseがなくても何も処理されず、不具合の原因を見つけにくくなります。
・実務向けコード例
Select Case departmentName
Case "営業", "営業一課"
Call ProcessSales
Case "経理"
Call ProcessAccounting
Case Else
MsgBox "未対応の部署です。"
End Select
・実務ではエラー通知やログ出力も検討する
今回はメッセージを表示していますが、実際の業務では、
- ログファイルへ記録する
- エラーシートへ出力する
- 処理を中断する
など、状況に応じた対応を行うこともあります。
Case Elseを「念のため」ではなく、想定外のデータへ対応するための重要な設計として考えることが大切です。
条件によっては何も処理しない設計が必要になることもあります。空分岐を安全に実装する考え方については、「【VBA】IF文でElseIfを用いて何も処理しない方法|空分岐の正しい設計と実務判断」も参考になります。
✅ 実務で保守しやすいSelect Caseの構成
Select Caseは書き方によって読みやすさが大きく変わります。
実務では次のポイントを意識すると、保守性が高くなります。
・関連する条件をグループ化する
例えば、
営業関連
管理部門
開発部門
のようにコメントを付けながらグループ化すると、後から見返しても理解しやすくなります。
・判定値は直接書かず変数へ格納する
判定対象は、
departmentName = Range("A2").Value
のように変数へ格納してから利用しましょう。
取得元が変更されても判定処理を変更せずに済むため、流用しやすくなります。
・同じ処理は1つのCaseへまとめる
同じコードを複数のCaseへ書いてしまうと、仕様変更時に修正漏れが発生しやすくなります。
「処理が同じならCaseをまとめる」
これが保守性を高める基本です。
Select Caseによる条件分岐を理解したら、次は繰り返し処理と組み合わせた実践的な使い方も覚えておきましょう。「【VBA】for nextで複数条件の処理方法(For Next×If)」では、実務でよく使われる組み合わせを解説しています。
✅ Select Caseで複数条件を使うときの注意点
最後に、実務でよくある注意点を紹介します。
- 同じ処理はCaseをまとめる
- 処理が異なるならCaseを分ける
- 範囲指定は
Case IsやToを利用する - 判定対象は変数へ格納する
- Case Elseは省略しない
- コメントで条件をグループ化しておく
こうした点を意識するだけで、数か月後・数年後のメンテナンス性が大きく向上します。
同じ条件分岐でも、OR条件を使って判定した方が分かりやすいケースもあります。ORを3つ以上組み合わせる実務的な設計については、「【VBA】IF文のORを3つ以上組み合わせた複数条件|実務で崩れない条件分岐の設計方法」で詳しく解説しています。
Select Caseによる複数条件の判定を理解したら、次はその条件を利用してデータを抽出する方法にも挑戦してみましょう。「【VBA】複数条件でデータ抽出する方法|実務で使える安定設計と高速化テクニック」では、実践的な抽出処理を詳しく紹介しています。
✅ まとめ:Select Caseで複数条件を整理して保守性を高めよう
この記事では、VBAでSelect Caseを使って複数条件を判定する方法について解説しました。
- Select Caseでは複数条件をカンマ区切りでまとめて指定できる
- 同じ処理を行う条件は1つのCaseへまとめると保守しやすい
- 数値でも文字列でも同じ考え方で利用できる
- 範囲判定には
Case IsやToを組み合わせると分かりやすい - 判定対象は変数へ格納すると再利用性が向上する
- Case Elseを活用して想定外のデータにも対応できるよう設計することが重要
Select Caseは、単に条件分岐を書くための構文ではありません。条件を整理し、将来の仕様変更にも対応しやすいコードを作るための構文です。条件が増えることを前提に設計する習慣を身に付けることで、読みやすく保守しやすいVBAコードを書けるようになるでしょう。