Excel VBAで「条件に応じて処理を分けたい!」と考える場面は多いはず。
そんなときに活躍するのがIf
If文(If…Then…Else)です。
本記事では、基本の構文から応用パターン、注意点、実務向けの使い方までを丁寧に解説。例を見ながら学べば、すぐに実践的なコードを書けるようになります。
If文とは?
If文とは、「条件を満たすかどうか」で処理の流れを制御できるVBAの基本構文です。
これにより、ユーザーの入力やセルの値に応じて処理を切り替える柔軟なコードが書けるようになります。 たとえば、数値が一定以上なら処理を実行し、そうでなければスキップするといった業務ロジックを簡単に実装できます。
- 条件に応じて処理を分岐できる構文
- 特定セルの値次第で処理をスキップ or 実行
MsgBox
等と組み合わせて、ユーザーに寄り添った業務ロジック化が容易
If文の基本構文
まずはIf文の最もシンプルな形から理解しましょう。
「条件が真なら処理を行い、そうでなければ別の処理を行う」という分岐の基本パターンです。VBA初心者はこの構文をマスターするだけで、コードの幅が一気に広がります。
If 条件 Then
処理A
Else
処理B
End If
例:A1セルの値が100以上なら「OK」、それ以外は「NG」とメッセージを表示する。
Sub CheckValue()
If Range("A1").Value >= 100 Then
MsgBox "OK"
Else
MsgBox "NG"
End If
End Sub
- 条件が真 (
True
) の場合に走る処理をThen
の後に記述 Else
は省略可(条件が偽の場合は何も処理しない)- 最後に必ず
End If
単一行/ブロック形式の使い分け
If文は、1行で完結する「単一行形式」と、複数の処理をまとめる「ブロック形式」があります。
単一行はコードが短く読みやすいですが、複数処理を含む場合は必ずブロック形式にしましょう。 構文ミスを避けるためにも、初心者のうちはブロック形式を基本にするのがおすすめです。
単一行形式(コードを簡潔に記述する)
If x > 10 Then MsgBox "10より大きい"
「メッセージを表示する」など1つの処理のみの場合に有効です。コードの見た目がスッキリするという嬉しさがあります。
ブロック形式(複数処理をまとめる)
If x > 10 Then
MsgBox "10より大きい"
Cells(1, 1).Interior.Color = vbYellow
End If
複数の処理をまとめたい時はブロック形式に記述する必要があります。基本的にはブロック形式の記述がおすすめです。
ElseIf・Elseで複数条件に対応
「もしAなら…」「そうでなく、もしBなら…」「どれでもなければCを実行」という複数分岐の書き方には、ElseIfとElseを使います。このように条件の優先順位を定めることで、業務ロジックをより正確に表現できるようになります。
例:セルの値に応じて分岐処理をする
下記のコードでは、A1セルの値に応じて複数のパターンでの分岐処理を行っています。
If Range("A1").Value >= 90 Then
MsgBox "grade: A"
ElseIf Range("A1").Value >= 80 And Range("A1").Value < 90 Then
MsgBox "grade: B"
ElseIf Range("A1").Value >= 70 And Range("A1").Value < 80 Then
MsgBox "grade: C"
Else
MsgBox "grade: D"
End If
ネスト(入れ子)ありの条件分岐
If文の中にさらにIf文を入れる構造を「ネスト」と呼びます。 複雑な条件や、複数の属性を組み合わせた条件判断に使われます。 ただし、ネストが深くなりすぎると可読性が下がるため、コメントを添えるなどの工夫が必要です。
If age >= 20 Then
If gender = "M" Then
MsgBox "男性の成人です"
Else
MsgBox "女性の成人です"
End If
Else
MsgBox "未成年です"
End If
このコードでは、2つのIf文で構成されています。
外側のIf文では、変数ageが20以上かどうかという条件が設定されています。そしてageに関する条件がTrueの場合に内側のIf文の条件分岐に進みます。
Select Caseと使い分けるコツ
同じ変数に対して複数の値を条件として処理を分けたいときは、Select Caseが便利です。 If文は論理式に強く、Select Caseは定数比較に強いので、状況に応じて使い分けることがVBA上達のコツになります。
下記のコードのように、変数が複数パターンの内どのパターンに一致するのか判定したい場合はSelect Case
の方が読みやすくおすすめです。
Select Case gender
Case "M": MsgBox "男性"
Case "F": MsgBox "女性"
Case Else: MsgBox "不明"
End Select
- Ifは「条件式が真かどうかを評価」
- Select Caseは「変数の値がどのパターンに一致するかを評価」
よくあるミスとエラー対処法
VBA初心者に多いミスとして、「End Ifの省略」「1行形式とElseの混同」「比較演算子の誤用」などがあります。 こうしたエラーの原因と修正方法を知っておけば、コードが動かないときにも冷静に対処できます。
ミスの内容 | 対処法 |
---|---|
End If を省略している | ブロック形式では必須 |
単一行のIf文でElse を書いている | End If に自動変換され混乱しがち |
= と == を混同している | VBAでは = だけです |
文字列比較で大小文字が混在 | UCase , LCase で統一比較 |
まとめ
- If文はVBAの基本かつ最重要構文の1つです。
- 条件分岐を自在に扱えるようになると、マクロの活用範囲が大きく広がります。
- 読みやすく、論理的で、エラーに強いコードを意識しましょう。
エクセルマクロで条件分岐を使うことで、データの自動処理を柔軟に行うことができます。 If
文、 ElseIf
やネストされた条件分岐、論理演算子、 Select Case
ステートメントなどを使い分けて、効率的に条件に応じた処理を行いましょう。