VBAで条件分岐を作成していると、「複数の変数を組み合わせて判定したい」という場面があります。
例えば、
- 部署と役職によって処理を分けたい
- 商品カテゴリと在庫数を組み合わせて判定したい
- ステータスと担当者の両方を確認して処理を実行したい
このようなケースでは、If...Thenを使う方法が一般的ですが、「Select Case文で複数の変数を判定できないのか」と疑問に思う方も多いでしょう。
結論から言うと、Select Case文では複数の変数を直接指定することはできません。
しかし、Select Case Trueや判定用の文字列・数値を組み合わせることで、複数の変数を分かりやすく判定できます。
この記事では、Select Case文で複数の変数を扱う方法や、実務で保守しやすいコードを書くポイントについて詳しく解説します。
✅ Select Case文で複数の変数を直接指定できる?
「変数を2つ指定してCaseを書けば判定できそう」と考える方もいますが、Select Case文はそのような構文には対応していません。
仕様を理解せずにコードを書くと構文エラーになったり、意図しない判定になったりするため、まずは基本的な考え方を押さえておきましょう。
・Select Caseで判定できるのは1つの式
基本的なSelect Case文は、次のように1つの式を評価します。
Select Case 判定対象
例えば、
Select Case departmentName
のように、1つの変数に対してCaseを並べるのが基本構文です。
そのため、
Select Case departmentName, positionName
のような書き方はできません。
・複数の変数をそのまま指定することはできない
例えば、
Select Case departmentName And positionName
や
Select Case departmentName, salesAmount
のような書き方はできません。
これは、Select Case文が1つの判定対象を評価する構文だからです。
複数の変数を条件にしたい場合は、別の方法を利用する必要があります。
Select Case Trueは、条件式をTrueまたはFalseで評価する仕組みを利用しています。この動作をより深く理解したい方は、【VBA】Boolean型とは?True/Falseの使い方と実務での注意点を徹底解説もあわせてご覧ください。
✅ 実務ではSelect Case Trueを使うことが多い
複数の変数を組み合わせる場合、実務ではSelect Case Trueを利用するケースがよくあります。
この方法なら、それぞれの変数を自由に組み合わせた条件式を書くことができます。
また、条件が増えても整理しやすいため、保守性も高くなります。
・複数の変数を自由に組み合わせられる
例えば、
- 部署
- 売上金額
の2つを判定する場合は、
Select Case True
を利用し、
Case departmentName = "営業" And salesAmount >= 1000000
のように記述できます。
複数の変数を1つの条件として扱えるため、実務でもよく利用される方法です。
・条件が増えても整理しやすい
例えば、
- 部署
- 売上金額
- ステータス
- 在庫数
など、判定対象が増えてもCaseごとに整理できます。
If文で何重にもネストするよりも、条件が一覧で見えるため、後からコードを修正する際にも分かりやすくなります。
複数の変数を判定する場面では、ANDやORを組み合わせた条件設計も欠かせません。条件式の組み立て方について詳しく知りたい方は、【VBA】IF文のandとorを組み合わせた複数条件|実務で迷わない条件設計も参考になります。
✅ 保守しやすいコードを書くための考え方
複数の変数を扱うコードでは、「動作すること」だけでなく、「後から修正しやすいこと」も重要です。
特に業務では、条件が追加されたり変更されたりすることが多いため、読みやすいコードを書くことが求められます。
・意味が分かる変数名を使う
例えば、
Dim x As String
Dim y As Long
よりも、
departmentNamesalesAmountemployeeStatus
のように役割が分かる名前を付ける方が、コード全体を理解しやすくなります。
変数名だけで判定内容が分かるようにしておくと、コメントが少なくても意図を把握できます。
・条件ごとにコメントを付ける
Caseが増えてきた場合は、
'営業部の重点管理対象
のようにコメントを付けておくと、仕様変更時にも判定内容をすぐ理解できます。
実務では「なぜこの条件があるのか」が重要になるため、処理の意図が伝わるコメントを残すことをおすすめします。
条件が増えてきた場合は、括弧を使って条件式を整理することも重要です。誤判定を防ぎながら可読性を高める方法については、【VBA】IF文の括弧を用いた複数条件|可読性と誤判定を防ぐ設計手法で詳しく解説しています。
✅ 実務で使いやすい複数変数の判定コード
ここでは、部署と売上金額の2つの変数を組み合わせて判定する例を紹介します。
このコードでは、意味の分かる変数名を使用し、条件ごとにコメントを付けることで、後から仕様変更しやすい構成にしています。
また、Select Case Trueを採用することで、条件をCase単位で整理し、どの条件でどの処理が実行されるのかが一目で分かるようにしています。
Sub CheckSalesCategory()
Dim departmentName As String
Dim salesAmount As Long
departmentName = "営業"
salesAmount = 1200000
Select Case True
'営業部で売上100万円以上
Case departmentName = "営業" And salesAmount >= 1000000
MsgBox "重点管理対象です。"
'営業部で売上50万円以上
Case departmentName = "営業" And salesAmount >= 500000
MsgBox "通常管理対象です。"
Case Else
MsgBox "通常処理です。"
End Select
End Sub
✅ この設計なら条件が増えても管理しやすい
今回のコードは、単に複数の変数を判定できるようにしただけではありません。
実務では、運用開始後に「条件を追加したい」「別の部署にも対応したい」といった仕様変更が発生することが珍しくありません。そのため、最初から保守性を意識した構成にしておくことが重要です。
ここでは、この書き方を採用する理由について解説します。
・Caseごとに条件を独立させられる
Select Case Trueを利用すると、それぞれの判定をCase単位で記述できます。
例えば、
- 営業部で売上100万円以上
- 営業部で売上50万円以上
- 経理部で売上30万円以上
というように、条件ごとに処理を分けられます。
後から新しい条件を追加する場合も、新しいCaseを追加するだけで対応できるケースが多く、既存コードへの影響を最小限に抑えられます。
・変数名だけで判定内容が分かる
実務では、自分以外の担当者がコードを修正することもあります。
そのため、
Dim x As String
Dim y As Long
のような変数名ではなく、
departmentNamesalesAmount
のように役割が分かる名前を付けることで、コードを読むだけで何を判定しているのか理解しやすくなります。
変数名を工夫することは、可読性だけでなく保守性の向上にもつながります。
条件分岐が増えた場合は、ElseIfを利用した設計も有効です。【VBA】IF文のElseIfを用いた複数条件|ネストを防ぎ実務で壊れない条件分岐を書く方法では、Select Caseとの考え方の違いについても理解しやすくなります。
✅ If文とSelect Case文はどちらを選ぶべき?
複数の変数を判定する場合、「If文で十分ではないか」と感じる方もいるでしょう。
実際、条件の数によってはIf文の方が適している場合もあります。
重要なのは、「どちらを使うか」ではなく、「どちらが読みやすく、将来の修正に対応しやすいか」を基準に選ぶことです。
・条件が少ないならIf文でも十分
例えば、
If departmentName = "営業" And salesAmount >= 1000000 Then
MsgBox "重点管理対象です。"
End If
この程度の条件であれば、If文の方がシンプルです。
無理にSelect Caseへ置き換える必要はありません。
・条件が増えるならSelect Case Trueが向いている
一方で、
- 部署
- 売上金額
- 担当者
- ステータス
- 優先順位
- 日付
など、複数の条件を組み合わせるようになると、If~ElseIfが長くなりがちです。
そのような場合は、Select Case Trueで条件を整理した方が、どの条件でどの処理が実行されるのかを把握しやすくなります。
実務では、現在の条件数だけでなく、「今後増える可能性」も考慮して選択することが大切です。
IF文でもSelect Caseでも、比較演算子を正しく組み合わせることが重要です。条件式の組み立て方について詳しく知りたい方は、【VBA】比較演算子を用いた複数条件の使用方法|実務で迷わない条件分岐の設計も参考にしてください。
✅ 複数の変数を1つの値として判定する方法もある
Select Case True以外にも、複数の変数を1つの文字列にまとめて判定する方法があります。
例えば、
Select Case departmentName & "_" & employeeStatus
Case "営業_在籍"
MsgBox "営業担当です"
Case "総務_在籍"
MsgBox "総務担当です"
End Select
このように文字列を連結すると、1つの判定対象として扱えます。
・この方法が向いているケース
この書き方は、
- 都道府県+市区町村
- 部署+役職
- 商品コード+サイズ
など、「組み合わせ自体が1つのキーになる場合」に便利です。
Caseが非常に読みやすくなるため、マスターデータを判定するような処理では活用されることがあります。
・条件式が必要ならSelect Case Trueがおすすめ
一方で、
- 売上100万円以上
- 在庫10個以下
- 今日以前の日付
など、比較演算子を使う条件が含まれる場合は、文字列連結では対応しにくくなります。
そのため、
- 比較条件がある場合
- AND・ORを利用する場合
は、Select Case Trueの方が柔軟に記述できます。
実務では、判定内容に応じて使い分けることが重要です。
複数の変数を文字列として連結して判定する場合は、型変換も重要になります。文字列への変換方法や実務での注意点については、【VBA】CStr関数で値を文字列に変換する方法|型変換で失敗しない実務設計も参考にしてください。
✅ 実務で複数の変数を扱うときの注意点
最後に、実務で意識したいポイントを紹介します。
・条件の優先順位を考える
Select Case Trueでは、最初にTrueになったCaseだけが実行されます。
例えば、
Case salesAmount >= 500000
Case salesAmount >= 1000000
と書くと、100万円以上でも最初のCaseが実行されます。
そのため、
- 条件が厳しいもの
- 優先度が高いもの
を上に配置するようにしましょう。
・判定ロジックを詰め込み過ぎない
条件が増えると、
departmentName = "営業" And _
salesAmount >= 1000000 And _
employeeStatus = "在籍" And _
orderStatus = "完了"
のように長くなることがあります。
このような場合は、
- 判定を関数へ切り出す
- Boolean変数へ代入する
など、処理を分割した方が保守しやすくなります。
「1つのCaseに何でも書く」のではなく、読みやすさを優先することが重要です。
・将来の仕様変更を見据える
業務では、
- 部署が追加される
- 判定条件が変わる
- 新しいステータスが増える
といった変更が頻繁に発生します。
そのため、Caseごとに役割を分け、コメントを付けながら整理しておくことで、後からの修正が容易になります。
実務では、「今動くコード」よりも「1年後も修正しやすいコード」を目指すことが大切です。
実際の業務では、複数の変数を組み合わせてデータを抽出する場面が多くあります。実践的な活用例については、【VBA】条件に合うデータを抽出する方法|For文・IF文で実務データを自在に扱うもぜひご覧ください。
今回紹介した複数変数の判定は、データ抽出処理でもよく利用されます。実務で使える複数条件の抽出方法については、【VBA】複数条件でデータ抽出する方法|実務で使える安定設計と高速化テクニックも参考にしてみてください。
✅ まとめ:複数の変数を判定するなら保守性を意識した設計を選ぼう
Select Case文では、複数の変数を直接指定することはできません。
しかし、Select Case Trueや、変数を1つの文字列として組み合わせる方法を利用することで、複数の変数を分かりやすく判定できます。
特に実務では、条件の追加や仕様変更が発生することを前提に、保守しやすい構成を選ぶことが重要です。
今回の記事のポイントをまとめると、次のとおりです。
- Select Case文では複数の変数を直接指定できない
- 複数条件を判定するなら
Select Case Trueが実務でよく使われる - 組み合わせが固定なら文字列を連結して判定する方法もある
- 意味が分かる変数名やコメントを付けることで保守性が向上する
- 条件の優先順位や将来の仕様変更まで考慮して設計することが大切
複数の変数を扱う条件分岐は、業務システムやデータ処理でも頻繁に登場します。状況に応じてSelect Case Trueと他の方法を使い分けることで、読みやすく、長く運用しやすいVBAコードを作成できるようになります。