Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 – If文

Excel VBA VBA
スポンサーリンク

If文は「条件しだいで処理を分けるための分岐スイッチ」

If文は、プログラムに「状況を見て、やることを変えてね」と指示するための文です。
人間の言葉で言えば、

「もし〇〇なら、Aをする。そうでなければBをする」

を、そのままコードにしたものです。

VBAの世界では、
「条件式が True なら、このブロックを実行」
「False なら、別のブロック(または何もしない)」
という形で動きます。

ここをしっかり理解すると、「点数で判定」「セルの値で処理を変える」「エラー時だけ別処理」など、実務でよくある“分岐”が一気に書けるようになります。


If文のいちばん基本の形

単純なIf(条件を満たすときだけ処理する)

最小構成はこれです。

If 条件式 Then
    ' 条件式が True のときだけ実行される処理
End If
VB

具体例で見てみます。

Sub SampleIfBasic()

    Dim score As Long
    score = 80

    If score >= 60 Then
        MsgBox "合格です"
    End If

End Sub
VB

流れを言葉にすると、

  1. score に 80 を入れる
  2. score >= 60 を評価する(80 >= 60 → True)
  3. True なので、If~End If の中身を実行する
  4. 「合格です」と表示される

もし score が 50 だったら、score >= 60 は False になり、
If の中身は一切実行されません。

「条件を満たすときだけ、何かをする」
これが、いちばんシンプルな If の使い方です。


If ~ Else で「どちらか一方」を選ぶ

合格/不合格の二択

「条件を満たすときはA、満たさないときはB」という二択にしたいときは、Else を使います。

If 条件式 Then
    ' 条件式が True のとき
Else
    ' 条件式が False のとき
End If
VB

具体例です。

Sub SampleIfElse()

    Dim score As Long
    score = 55

    If score >= 60 Then
        MsgBox "合格です"
    Else
        MsgBox "不合格です"
    End If

End Sub
VB

ここでは、

score >= 60 が True → 「合格です」
score >= 60 が False → 「不合格です」

という分岐になっています。

「どちらか一方は必ず実行される」というのが、If~Else の特徴です。


If ~ ElseIf ~ Else で「三択以上」の分岐

点数でランク分けする例

条件が二つでは足りないときは、ElseIf を使って分岐を増やします。

If 条件1 Then
    ' 条件1がTrueのとき
ElseIf 条件2 Then
    ' 条件1がFalseで、条件2がTrueのとき
ElseIf 条件3 Then
    ' 条件1,2がFalseで、条件3がTrueのとき
Else
    ' 上のどれもTrueでなかったとき
End If
VB

具体例で見てみましょう。

Sub SampleIfElseIf()

    Dim score As Long
    score = 85

    If score >= 90 Then
        MsgBox "評価:S"
    ElseIf score >= 80 Then
        MsgBox "評価:A"
    ElseIf score >= 70 Then
        MsgBox "評価:B"
    ElseIf score >= 60 Then
        MsgBox "評価:C"
    Else
        MsgBox "評価:D"
    End If

End Sub
VB

ここで重要なのは、「上から順番に判定される」ということです。

score が 85 の場合、

score >= 90 → False
score >= 80 → True

となった時点で、「評価:A」が実行され、残りの ElseIf は見られません。

この「上から順にチェックして、最初にTrueになったところで止まる」という動きは、If文を設計するときにとても大事なポイントです。


条件式の書き方と考え方を深掘りする

条件式は「True / False を返す式」

If の後ろに書く「条件式」は、最終的に True か False を返す式です。

If score >= 60 Then
VB

ここでは、score >= 60 が条件式です。
比較演算子(>=)を使って、「60以上かどうか」を判定しています。

他にも、こんな条件式が書けます。

If Range("A1").Value = "完了" Then
If IsEmpty(Range("A1")) Then
If score >= 60 And score < 80 Then
If Not IsNumeric(Range("A1").Value) Then
VB

どれも、「評価すると True / False になる式」です。
If は、その結果を見て「中身を実行するかどうか」を決めています。

「条件式=True / False を返す普通の式」
という感覚を持てると、If文が一気に怖くなくなります。

条件を日本語に言い換えてみる癖をつける

例えば、

If score >= 60 And score < 80 Then
VB

これを日本語にすると、

「score が 60以上 かつ 80未満 のとき」

です。

If文を書くとき・読むときは、
必ず「日本語に言い換えてみて、意味がスッと入るか」を確認してください。

意味がもやっとする条件式は、たいていバグの温床になります。
必要ならカッコを使って、よりはっきり書いても構いません。

If (score >= 60) And (score < 80) Then
VB

ネスト(入れ子)のIf文と、書きすぎ注意の話

Ifの中にIfを書く

条件が複雑になると、If の中に If を書くこともあります。

Sub SampleNestedIf()

    Dim score As Long
    Dim isMember As Boolean

    score = 70
    isMember = True

    If score >= 60 Then
        If isMember = True Then
            MsgBox "会員の合格者です"
        Else
            MsgBox "非会員の合格者です"
        End If
    Else
        MsgBox "不合格です"
    End If

End Sub
VB

ここでは、

まず「合格かどうか」を判定し、
合格だった場合だけ「会員かどうか」をさらに判定しています。

ネストしすぎると読めなくなる

If の中に If、その中にさらに If…とやりすぎると、
自分でも読めないコードになります。

そうなってきたら、

条件を整理して ElseIf にまとめる
途中の判定を別の関数に切り出す

など、「読みやすさ」を優先して書き直すのが大事です。

If文は“書ける”ことよりも、“読める”ことのほうが重要です。
未来の自分が読んだときに、すぐ意味が分かるかどうかを常に意識してみてください。


典型パターンをいくつか押さえておく

範囲チェック(〇以上△未満)

点数や数値の範囲判定は、If文の超定番です。

If score >= 60 And score < 80 Then
    MsgBox "60以上80未満"
End If
VB

「以上/以下」と「より大きい/より小さい」の違いを意識して、
境界値(60や80)がどちら側に含まれるかを丁寧に決めてください。

セルの状態で処理を変える

If IsEmpty(Range("A1")) Then
    MsgBox "A1は空です"
Else
    MsgBox "A1には値が入っています"
End If
VB
If Range("A1").Value = "完了" Then
    ' 完了時の処理
Else
    ' 未完了時の処理
End If
VB

Excel VBAでは、「セルの値や状態で分岐する」If文がとても多いです。
ここに慣れてくると、「シートを見ながらロジックを考える」感覚がついてきます。


まとめ:If文は「ロジックを言葉にする」ための一番の相棒

If文は、プログラムに「状況に応じてどう動くか」を教えるための、いちばん基本的な道具です。

今日のポイントをぎゅっとまとめると、

If は「条件式が True なら中身を実行」
Else で「True のとき/False のとき」の二択を作れる
ElseIf で「三択以上」の分岐が書ける(上から順に判定される)
条件式は「True / False を返す式」だと意識する
日本語に言い換えて意味が通るかを必ず確認する

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