【Excel VBA】If文で条件分岐する方法|「〇〇なら××する」を自動化する基本構文

マクロ・VBA

マクロに「セルの値が80以上なら合格、それ未満なら不合格と表示したい」といった判断をさせたいのに、書き方がわからず悩んでいませんか。これまでの記事で紹介したFor Nextループは同じ処理を繰り返すことはできますが、状況に応じて処理を変えることはできません。この記事では、条件によって処理を分岐させる基本構文「If文」の使い方を、図解を交えて解説します。

マクロに「判断」をさせるにはIf文が必要

Excelの表を扱っていると、「点数が80点以上なら合格」「在庫数が0なら発注」「期限を過ぎていたら赤字にする」のように、値に応じて処理を変えたい場面が数多くあります。しかし、これまでのようにコードを上から順に実行するだけでは、すべてのセルに同じ処理をすることしかできません。

こうした「もし〇〇なら××する、そうでなければ△△する」という判断をマクロに組み込むための構文がIf文です。If文を覚えると、ただ処理を実行するだけだったマクロが、状況に応じて賢く動くプログラムへと変わります。たとえば大量の注文データから在庫切れの商品だけを自動で赤字にする、といった実務作業も、If文が書ければ数行のコードで済ませられるようになります。

If ~ Then ~ Else の基本構文と動作の仕組み

If文の基本形は次のとおりです。

If Cells(1, 1).Value >= 80 Then
    Cells(1, 2).Value = "合格"
Else
    Cells(1, 2).Value = "不合格"
End If

このコードは、A1セルの値が80以上であれば「Then」の後ろの処理(B1に「合格」と入力)を実行し、そうでなければ「Else」の後ろの処理(B1に「不合格」と入力)を実行します。End Ifまでが1つのまとまりで、条件がどちらであっても必ずどちらか一方の処理だけが実行される点がポイントです。

下の図は、A1セルの値によって処理が2方向に分かれ、それぞれ別の結果がB1セルに書き込まれる流れを表したものです。

If Then Elseで条件によって処理が2方向に分岐し結果セルに異なる値が書き込まれる流れを示す図解

ElseIfで3つ以上の条件に振り分ける

条件が2択ではなく3つ以上ある場合は、ElseIfを使って条件を追加していきます。たとえば点数に応じてS・A・B・Cの4段階で評価したい場合は、次のように書きます。

If Cells(1, 1).Value >= 90 Then
    Cells(1, 2).Value = "S"
ElseIf Cells(1, 1).Value >= 70 Then
    Cells(1, 2).Value = "A"
ElseIf Cells(1, 1).Value >= 50 Then
    Cells(1, 2).Value = "B"
Else
    Cells(1, 2).Value = "C"
End If

このコードは上から順番に条件を確認し、最初に条件を満たした時点でその処理を実行して残りの判定はスキップします。そのため、条件は必ず「範囲が広いもの」から先に書くのがコツです。90以上の条件より先に70以上の条件を書いてしまうと、90点でも「A」と判定されてしまうので注意してください。

次の図は、点数によって上から順に条件をたどり、最初に一致した時点で評価が確定する様子を表したものです。

ElseIfで複数条件を上から順に判定し最初に一致した時点で評価が確定する流れを示す図解

For Nextループと組み合わせた実務活用例と注意点

If文は単体で使うより、以前の記事で紹介したFor Nextループと組み合わせることで真価を発揮します。表の全行に対して、行ごとに条件判定をしながら処理できるからです。

For i = 1 To lastRow
    If Cells(i, 1).Value >= 80 Then
        Cells(i, 2).Value = "合格"
    Else
        Cells(i, 2).Value = "不合格"
    End If
Next i

複数の条件を同時に満たすか判定したい場合は、And(かつ)やOr(または)を組み合わせます。たとえば「80点以上、かつ欠席が0回」なら合格、という条件はIf Cells(i,1).Value >= 80 And Cells(i,2).Value = 0 Thenのように書けます。反対に「80点以上、または皆勤賞を持っている」のようにどちらか一方を満たせばよい場合は、Andの部分をOrに置き換えるだけです。また、1つの値を多数の候補と比較する場合は、If文をいくつも並べるよりSelect Caseという別の構文を使うほうがコードがすっきりすることも覚えておくとよいでしょう。判定の範囲や条件の書く順序を間違えると、意図しない結果になりやすいので、まずは短いデータで動作確認をしながら組み立てていくことをおすすめします。

コメント

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