VBAのSelect Case文とIf文の使い分け(どちらを選ぶべきか)

VBAでは条件分岐を行う際に If 文 と Select Case 文 のどちらかを使用します。
しかし、「どちらを選べばよいのか?」と迷うこともあるでしょう。本記事では、それぞれの特性を比較し、適切な使い分けを解説します。


1. If文とSelect Case文の基本構文

(1) If文の基本構文

If 条件1 Then
'条件1がTrueのときの処理
ElseIf 条件2 Then
'条件2がTrueのときの処理
Else
'どの条件にも当てはまらない場合の処理
End If

特徴

  • ElseIf を使って 複数の条件を設定 可能
  • 比較演算子(=, <, >, <=, >=, <>)を自由に使える
  • And や Or を使って 複雑な条件式 を設定可能

(2) Select Case文の基本構文

Select Case 評価対象
Case 値1
'値1のときの処理
Case 値2
'値2のときの処理
Case Else
'どの条件にも当てはまらない場合の処理
End Select

特徴

  • Case に 特定の値や範囲を指定 可能
  • 可読性が高く、条件が多いときに整理しやすい
  • 比較する変数が1つの場合に適している

2. If文とSelect Case文の比較

比較項目If文Select Case文
適した用途条件が複雑な場合同じ変数に対して複数の値を比較する場合
可読性条件が増えると読みにくい見やすく整理しやすい
処理速度条件の数が少ないときに有利条件が多い場合に効率的
比較の柔軟性And / Or で複雑な条件を作れるTo や Is を使って範囲を指定できる

3. 使い分けの判断基準

(1) 比較する変数が1つならSelect Case

Select Case は 「1つの変数に対して、複数の値を比較する」 のに適しています。

例: 点数による成績判定

Sub CheckGrade()
Dim score As Integer
score = Range("A1").Value

Select Case score
Case 90 To 100
MsgBox "評価: A"
Case 80 To 89
MsgBox "評価: B"
Case 70 To 79
MsgBox "評価: C"
Case Else
MsgBox "評価: F"
End Select
End Sub

ポイント

  • score という 1つの変数 に対して、複数のケースを判定する
  • Case 90 To 100 のように 範囲を指定 でき、分かりやすい

(2) 複数の条件を組み合わせるならIf

If は 「異なる変数を組み合わせたり、複雑な条件を設定する」 のに適しています。

例: 3つの条件を組み合わせた判定

Sub CheckBonus()
Dim sales As Double, experience As Integer, performance As String
sales = Range("A1").Value
experience = Range("B1").Value
performance = Range("C1").Value

If sales > 100000 And experience >= 5 And performance = "A" Then
MsgBox "ボーナス支給: 高額"
ElseIf sales > 50000 And performance = "B" Then
MsgBox "ボーナス支給: 中額"
Else
MsgBox "ボーナスなし"
End If
End Sub

ポイント

  • salesexperienceperformance の3つの条件 を組み合わせて判定
  • And を使って、複雑な条件分岐を実装

4. 条件の数による選択

(1) 条件が2〜3個ならIf

短い条件分岐なら If の方が簡潔に書けます。

If score >= 90 Then
MsgBox "A"
ElseIf score >= 80 Then
MsgBox "B"
Else
MsgBox "C"
End If

→ Select Case にすると余計に行数が増えるため If の方が適している。


(2) 条件が4個以上ならSelect Case

条件が増えると If は読みにくくなるため、Select Case を使うと可読性が向上します。

Select Case score
Case 90 To 100: MsgBox "A"
Case 80 To 89: MsgBox "B"
Case 70 To 79: MsgBox "C"
Case Else: MsgBox "D"
End Select

→ 条件が整理され、見やすくなる。


5. IfとSelect Caseの組み合わせ

場合によっては、If と Select Case を組み合わせることも有効です。

例: 性別と年齢でカテゴリを分ける

Sub CheckCategory()
Dim gender As String, age As Integer
gender = Range("A1").Value
age = Range("B1").Value

If gender = "Male" Then
Select Case age
Case 0 To 18: MsgBox "男性: 未成年"
Case 19 To 60: MsgBox "男性: 成人"
Case Else: MsgBox "男性: シニア"
End Select
ElseIf gender = "Female" Then
Select Case age
Case 0 To 18: MsgBox "女性: 未成年"
Case 19 To 60: MsgBox "女性: 成人"
Case Else: MsgBox "女性: シニア"
End Select
Else
MsgBox "不明な性別"
End If
End Sub

ポイント

  • 性別の判定を If で行い、その後 Select Case で年齢を分類
  • 組み合わせることで、スッキリと整理

6. まとめ

選ぶ基準If文を使うSelect Case文を使う
条件の種類異なる変数を比較1つの変数に対して複数の値を比較
条件の数2〜3個なら適切4個以上なら見やすい
柔軟性And / Or で複雑な条件を設定To / Is で範囲指定が可能
可読性短い条件ならシンプル長い条件なら整理しやすい

最適な選択をしよう!

  • 「条件がシンプル or 複数の変数を比較」 → If文
  • 「1つの変数を基に、複数のケースを整理」 → Select Case文
  • 「両方の特性を活かした組み合わせ」 → If + Select Case

状況に応じて適切に使い分けることで、読みやすく、効率的なコード を作ることができます!

コメント

タイトルとURLをコピーしました