【Excel VBA】If文の使い方|条件分岐を基本から実務まで解説

スポンサーリンク

「VBAのIf文って、なんだか難しそう……」

そう思って手が止まっていませんか? 条件分岐はプログラミングの基本中の基本ですが、初めて見ると記号や英語の羅列に見えて、つい身構えてしまいますよね。

でも安心してください。If文の仕組みは、実は日常会話とほとんど同じです。この記事では基本の書き方から実務で使えるコードまで、一つずつ丁寧に解説していきます。

VBA If文(条件分岐)とは?

条件分岐とは、条件に応じて処理を切り替える仕組みのことです。

日常で例えるとこんな感じです。

「明日晴れたらピクニックに行こう。くもりだったら映画にして、雨だったら家でのんびりしよう」

この会話、無意識に条件分岐をしていますよね。「天気」という条件によって「行き先」という処理を変えているわけです。

VBAのIf文も、やっていることはまったく同じです。「もし○○だったら△△する、そうでなければ□□する」をコードで書いているだけなんですよ。

VBEの起動とコードの書き方

If文を試すには、まずVBE(Visual Basic Editor)を開く必要があります。

VBEの開き方

一番かんたんな方法は、Excelを開いた状態で Alt + F11 キーを押すことです。

開発タブが表示されていない場合でも、このショートカットなら直接VBEを開けます。開発タブを表示させたい場合は「ファイル」→「オプション」→「リボンのユーザー設定」へ進みます。そこで「開発」にチェックを入れてくださいね。

標準モジュールの挿入

VBEが開いたら、コードを書く場所を用意します。

メニューの「挿入」→「標準モジュール」を選んでください。白い画面が表示されたら、そこにコードを貼り付けて実行できます。

実行方法は F5キー を押すか、メニューの「実行」→「Sub/ユーザーフォームの実行」を選びます。

If文の基本構文(コピペで動くコード)

ここからは、実際にコピペして動かせるコードで解説していきます。

Ifだけのシンプルな分岐

まずは一番シンプルな形です。「条件に合ったときだけ処理する」パターンです。

Sub シンプルなIf()
    Dim 天気 As String '--- 天気を入れる変数 ---
    天気 = "晴れ"

    If 天気 = "晴れ" Then
        MsgBox "ピクニックに出かけよう!"
    End If
End Sub

日本語に置き換えると、こうなります。

  • If → もし
  • 天気 = "晴れ" → 天気が「晴れ」だったら
  • Then → そのときは
  • End If → ここまで

ポイントは If で始めたら、必ず End If で閉じる ことです。これを忘れるとエラーになるので、Ifを書いたらすぐにEnd Ifも書いておくのがおすすめです。

変数(Dim)の使い方がまだよく分からないという方は、先にそちらの記事を読んでおくとスムーズですよ。

If…Else(2択の分岐)

次は「条件に合ったらAの処理、合わなかったらBの処理」という2択パターンです。

Sub 二択の分岐()
    Dim 天気 As String '--- 天気を入れる変数 ---
    天気 = "雨"

    If 天気 = "晴れ" Then
        MsgBox "ピクニックに出かけよう!"
    Else
        MsgBox "家でのんびり過ごそう"
    End If
End Sub

Else は「その他」という意味です。If の条件に合わなかった場合、すべてここに流れてきます。

このコードでは天気が「雨」なので、Else側の「家でのんびり過ごそう」が表示されます。天気を「晴れ」に書き換えて実行すると、結果が変わりますよ。

If…ElseIf…Else(3つ以上の分岐)

条件を3つ以上に分けたいときは ElseIf を使います。冒頭の天気の例をそのままコードにしてみましょう。

Sub 天気で行き先を決める()
    Dim 天気 As String '--- 天気を入れる変数 ---
    天気 = "くもり"

    If 天気 = "晴れ" Then
        MsgBox "ピクニックに出かけよう!"
    ElseIf 天気 = "くもり" Then
        MsgBox "映画を見に行こう"
    Else
        MsgBox "家でのんびり過ごそう"
    End If
End Sub

処理の流れを整理しておきます。

  1. まず If の条件をチェック(天気 = “晴れ”?)
  2. 合わなければ ElseIf の条件をチェック(天気 = “くもり”?)
  3. どれにも合わなければ Else の処理を実行

ElseIf は何個でも追加できます。ただし、最初の条件は必ず If で書く必要があります。ElseIf だけで始めることはできないので注意してくださいね。

If文の3つのパターンを表にまとめておきましょう。

パターン書き方使いどころ
If…End If条件に合ったときだけ処理1つの条件だけチェックしたいとき
If…Else…End If2択の分岐「はい/いいえ」で処理を分けたいとき
If…ElseIf…Else…End If3つ以上の分岐条件ごとに違う処理をしたいとき

If文の実践コード(業務で使えるバージョン)

基本を押さえたところで、実際の業務で使えるコードを見ていきましょう。

セルの値で処理を分岐する例

たとえば、テストの点数がセルに入力されていて、隣のセルに判定結果を書き込みたい場合です。A列に点数が入っていて、B列に判定を出力します。

Sub テスト判定()
    Dim i As Long       '--- 行カウンター ---
    Dim lastRow As Long '--- 最終行 ---
    Dim 点数 As Long    '--- 判定対象の点数 ---

    lastRow = Cells(Rows.Count, 1).End(xlUp).Row '--- A列の最終行を取得 ---

    For i = 2 To lastRow '--- 2行目(データ開始行)から最終行まで ---
        点数 = Cells(i, 1).Value

        If 点数 >= 80 Then
            Cells(i, 2).Value = "合格"
        ElseIf 点数 >= 60 Then
            Cells(i, 2).Value = "追試"
        Else
            Cells(i, 2).Value = "不合格"
        End If
    Next i

    MsgBox "判定が完了しました!"
End Sub

このコードでは For文 を使ってA列のデータを1行ずつ処理しています。最終行の取得を使っているので、データが何行あっても自動で対応できますよ。

複数条件を組み合わせる(And / Or)

「点数が80点以上かつ出席率が90%以上のとき合格」のように、複数の条件を同時にチェックしたい場合は AndOr を使います。

Sub 複数条件の判定()
    Dim 点数 As Long   '--- テストの点数 ---
    Dim 出席率 As Long '--- 出席率(%) ---

    点数 = Range("A2").Value
    出席率 = Range("B2").Value

    If 点数 >= 80 And 出席率 >= 90 Then
        MsgBox "合格です!"
    ElseIf 点数 >= 80 Or 出席率 >= 90 Then
        MsgBox "条件付き合格です"
    Else
        MsgBox "残念ですが不合格です"
    End If
End Sub

使い分けをまとめます。

演算子意味
And両方の条件がTrueのとき点数 >= 80 And 出席率 >= 90
Orどちらかの条件がTrueのとき点数 >= 80 Or 出席率 >= 90
Not条件を反転させるNot 点数 >= 80(80点未満のとき)

And と Or を同じIf文に混ぜるときは、括弧 () で優先順位を明確にしましょう。括弧がないと、意図しない判定になることがあります。

If文とSelect Caseの使い分け

VBAにはIf文のほかに、Select Case文という条件分岐の方法もあります。

どちらを使うか迷ったときの目安はこちらです。

条件おすすめの書き方
条件が2つ以下If文で十分
1つの値に対して3つ以上の分岐Select Caseがスッキリ
複数の変数を同時に判定If文(And/Or)の方が柔軟
範囲で分岐したい(○○以上など)どちらでもOK

たとえば、さきほどの天気の例のように「1つの変数の値で3つ以上に分岐する」場合は、Select Caseで書くとグッとコードが見やすくなります。

Select Case文の詳しい使い方は、Select Case文で条件分岐を見やすく書く方法で解説していますので、あわせて読んでみてくださいね。

よくあるエラーと対処法

If文を書いていて遭遇しやすいエラーをまとめました。

End Ifの書き忘れ

一番多いのがこのエラーです。「コンパイル エラー: End If に対応する If がありません」と表示されます。

'--- 悪い例:End Ifがない ---
Sub エラー例1()
    If Range("A1").Value > 0 Then
        MsgBox "正の数です"
    '--- ここにEnd Ifが必要! ---
End Sub

If文が入れ子(ネスト)になっていると、どのIfにEnd Ifが対応しているか分かりにくくなります。Ifを書いたらすぐにEnd Ifも書く習慣をつけると、このエラーを防げますよ。

比較演算子のミス

「等しい」を表す = と「代入」の = を混同するケースです。VBAではどちらも = を使いますが、If文の中では比較として扱われるので、実は心配不要です。

ただし、文字列を比較するときに = ではなく == と書いてしまうのはNGです。VBAには == という演算子はありません。

'--- 悪い例:==はVBAでは使えない ---
If 天気 == "晴れ" Then  '← コンパイルエラー!

型の不一致

セルの値を数値として比較したいのに、セルに文字列が入っているとエラーになることがあります。

'--- 安全な書き方:IsNumericで事前チェック ---
If IsNumeric(Range("A1").Value) Then
    If CLng(Range("A1").Value) >= 80 Then
        MsgBox "合格"
    End If
Else
    MsgBox "数値を入力してください"
End If

IsNumeric で数値かどうかを先にチェックしておくと、実行時エラーを防げます。

エラーパターンをまとめておきましょう。

エラー内容原因対処法
End Ifに対応するIfがありませんEnd Ifの書き忘れIfを書いたらすぐEnd Ifも書く
構文エラー==の使用、Thenの書き忘れ=を使う、Thenを忘れずに書く
型の不一致文字列と数値の比較IsNumericで事前チェック
処理が通らないElseIfの条件が前のIfと重複条件の順序を見直す

マクロを保存するときは、ファイル形式を Excelマクロ有効ブック(.xlsm) にするのを忘れないでください。通常の .xlsx で保存すると、せっかく書いたマクロが消えてしまいます。

まとめ

この記事では、VBA If文の使い方を基本から実務活用まで解説しました。

ポイントをおさらいしておきましょう。

  • If文は 「もし○○だったら△△する」 という条件分岐の基本構文
  • If / ElseIf / Else の3つを組み合わせて、複数の条件を処理できる
  • 複数の条件を同時にチェックするには And / Or 演算子を使う
  • 条件が3つ以上で1つの値の分岐なら、Select Case文の方がスッキリ書ける
  • If を書いたら End If もセットで書く(エラー防止の基本)

条件分岐はVBAの中でもっともよく使う構文です。まずはこの記事のサンプルコードをコピーして、実際に動かしてみてください。変数の値を変えて結果がどう変わるか試してみると、理解がぐっと深まりますよ。

If文を使いこなせるようになったら、For文でのループ処理Do Loopでの繰り返し処理にも挑戦してみてくださいね。

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