ExcelVBAを使ったプログラミングでは、条件分岐を扱う場面が数多く登場します。その中で最も基本的なのが If ~ ElseIf ~ Else ですが、条件が増えるとコードが複雑化してしまい、保守性や可読性が低下します。
そこで活躍するのが Select Case文 です。複数条件をシンプルに整理し、スッキリとしたコードを記述できるため、実務での利用頻度も非常に高い構文です。
この記事では「vba Select Case文の使用例と適用パターン」をテーマに、基本構文から応用的な使い方、If文との違い、実務における適用パターンまで徹底解説します。
目次
- ✅ Select Case文の基本構文
- ・基本形
- ・If文との違い
- ✅ Select Case文の基本使用例
- ・数値による判定
- ・文字列による判定
- ✅ 複数条件のまとめ方
- ・複数値を1つにまとめる
- ・範囲指定
- ✅ Select Caseの応用例
- ・曜日判定
- ・商品分類
- ・エラーハンドリングでの利用
- ✅ Select Caseが適しているパターン
- ・条件が多い場合
- ・単一変数の判定
- ・グループ化できる場合
- ✅ If文とSelect Case文の使い分け
- ・If文に向くケース
- ・Select Caseに向くケース
- ✅ 実務に役立つSelect Caseのテクニック
- ・変数の型を意識する
- ・Case Elseを必ず入れる
- ・複数列データにも応用できる
- ✅ まとめ:Select Caseを使いこなして条件分岐を効率化しよう
✅ Select Case文の基本構文
・基本形
Select Case 式
Case 値1
' 条件1に一致したときの処理
Case 値2
' 条件2に一致したときの処理
Case Else
' それ以外の場合
End Select
・If文との違い
If文:複雑な論理式に柔軟に対応できるSelect Case:単一式の値で複数条件を整理できる
条件が多い場合はSelect Caseの方がコードが読みやすくなります。
参考:【VBA】セルに特定の文字が入っていた場合にIF文で複数条件を処理する方法
✅ Select Case文の基本使用例
・数値による判定
Sub ScoreJudge() Dim score As Integer score = Range("A1").Value Select Case score Case Is >= 90 MsgBox "S評価" Case Is >= 80 MsgBox "A評価" Case Is >= 70 MsgBox "B評価" Case Is >= 60 MsgBox "C評価" Case Else MsgBox "D評価" End Select End Sub
参考:【VBA】If文の複数分岐を実現する方法|効率的な条件分岐と実務応用
・文字列による判定
Select Case Range("B1").Value Case "完了" MsgBox "処理済" Case "進行中" MsgBox "対応中" Case "未処理" MsgBox "未対応" Case Else MsgBox "不明" End Select
参考:【VBA】文字列を検索してセルの位置を取得する方法|Find・InStr・ループを使った実務例
✅ 複数条件のまとめ方
・複数値を1つにまとめる
Select Case Range("C1").Value
Case "A", "B", "C"
MsgBox "グループ1"
Case "D", "E"
MsgBox "グループ2"
Case Else
MsgBox "その他"
End Select
・範囲指定
Select Case Range("D1").Value
Case 1 To 5
MsgBox "1~5"
Case 6 To 10
MsgBox "6~10"
Case Else
MsgBox "その他"
End Select
✅ Select Caseの応用例
・曜日判定
Sub CheckWeekday()
Dim dayName As String
dayName = Format(Date, "ddd")
Select Case dayName
Case "月", "火", "水", "木", "金"
MsgBox "平日です"
Case "土", "日"
MsgBox "休日です"
Case Else
MsgBox "不明な日付"
End Select
End Sub
・商品分類
Sub ProductCategory()
Dim code As String
code = Range("A1").Value
Select Case code
Case "P01", "P02"
MsgBox "食品"
Case "P03", "P04"
MsgBox "衣料品"
Case "P05"
MsgBox "雑貨"
Case Else
MsgBox "その他"
End Select
End Sub
・エラーハンドリングでの利用
Sub ErrorJudge() Dim errCode As Integer errCode = Range("B1").Value Select Case errCode Case 100 MsgBox "ファイルが見つかりません" Case 200 MsgBox "アクセス拒否" Case 300 MsgBox "不明なエラー" Case Else MsgBox "その他のエラー" End Select End Sub
参考:【VBA】エラーを無視して終了する方法:エラーハンドリング
✅ Select Caseが適しているパターン
・条件が多い場合
10個以上の条件があるとき、If文だと可読性が大幅に低下します。Select Caseなら縦に並ぶだけで見やすく整理できます。
・単一変数の判定
1つの変数の値によって分岐する場合はSelect Caseが最適。
・グループ化できる場合
複数の値を1つのCaseにまとめられるため、条件の整理が容易になります。
✅ If文とSelect Case文の使い分け
・If文に向くケース
条件が「変数A > 10 And 変数B < 5」など複雑なとき
範囲外チェックなど論理式が重要な場合
・Select Caseに向くケース
単一の値をもとに多岐分岐する場合
条件数が多くなる場合
可読性や保守性を重視する場合
✅ 実務に役立つSelect Caseのテクニック
・変数の型を意識する
文字列・数値でCaseの判定が異なるため、入力値の型を統一しておくことが重要です。
・Case Elseを必ず入れる
想定外の値が来た場合のために、必ずCase Elseを用意するのが実務上の鉄則です。
・複数列データにも応用できる
「部署コード」「ステータス」など複数列の組み合わせで分岐させたい場合は、条件式を文字列結合して判定に利用できます。
Select Case 部署 & "_" & ステータス
Case "営業_完了"
MsgBox "営業部 完了処理"
Case "総務_未処理"
MsgBox "総務部 未処理"
Case Else
MsgBox "その他"
End Select
✅ まとめ:Select Caseを使いこなして条件分岐を効率化しよう
Select Caseは複数条件を整理するのに最適な構文。数値判定、文字列判定、範囲指定など幅広く活用可能。
実務では「点数評価」「商品分類」「曜日判定」「エラーハンドリング」などに応用できる。
条件が多い場合や単一変数で分岐する場合は
Select Caseを使い、複雑な論理式はIf文で対応する。Case Elseを必ず記述し、想定外の入力にも備える。
ExcelVBAでSelect Caseを使いこなせるようになると、コードが読みやすく保守性も高まり、業務効率化に大きく貢献します。本記事を参考に、ぜひ実務のマクロに活用してください。