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

Excel VBA VBA
スポンサーリンク

ElseIfは「条件が3つ以上あるときの整理整頓ツール」

If文は「もし〇〇なら〜する」という分岐でした。
でも現実のロジックって、「合格/不合格」みたいな二択だけじゃなくて、

  • S評価
  • A評価
  • B評価
  • C評価
  • D評価

みたいに「3つ以上のパターン」に分かれることが多いですよね。
この「多段階の分岐」を、読みやすく・きれいに書くための仕組みElseIf です。

「条件が増えてきたら、Ifの中にIfをネチネチ書くんじゃなくて、ElseIfで一列に並べよう」
というイメージを持ってもらえるといいです。


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

ここで一番大事なのは、
「上から順番に判定されて、最初にTrueになったところだけが実行される」
というルールです。

点数で評価ランクを分ける例

Sub SampleElseIf_Score()

    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 のときの流れを追ってみます。

  1. score >= 90 → 85 >= 90 は False
  2. score >= 80 → 85 >= 80 は True
  3. ここで「評価:A」が実行され、以降の ElseIf は一切見られない

つまり、「最初にTrueになった行で止まる」という動きです。
これを理解しておくと、「条件の順番」がどれだけ大事かが見えてきます。


ElseIfを使うと何がうれしいのか(ネストとの比較)

ElseIfを使わないとどうなるか(悪い例)

同じロジックを、ElseIfを使わずに書くとこうなります。

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

動きとしては同じですが、
見た瞬間に「うわ、読みにくい…」ってなりませんか?

If の中に If、その中にまた If…という“入れ子地獄”になっていて、
どこがどの条件なのか、一気に分かりづらくなります。

ElseIfで横一列に並べるメリット

さっきの ElseIf 版はこうでした。

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
VB

条件が「縦に一列」で並んでいて、
上から順に読めばロジックがそのまま頭に入ってきます。

ElseIfの本質は、「多段階の条件分岐を、読みやすく整理すること」です。
動きだけならネストでも書けますが、可読性がまったく違います。


条件の順番がロジックそのものになる、という感覚

「どの条件を先に判定するか」が超重要

例えば、次の2つを比べてみてください。

If score >= 60 Then
    MsgBox "60点以上"
ElseIf score >= 80 Then
    MsgBox "80点以上"
End If
VB
If score >= 80 Then
    MsgBox "80点以上"
ElseIf score >= 60 Then
    MsgBox "60点以上"
End If
VB

一見、同じ条件を使っているように見えますが、
上のコードは「80点以上でも、最初の条件(60以上)で止まってしまう」ので、
80点の人に「60点以上」と表示されてしまいます。

下のコードは、

  1. まず「80以上か?」をチェック
  2. ダメなら「60以上か?」をチェック

という順番なので、意図どおりに動きます。

ElseIf を使うときは、
「どの条件を先に判定すべきか」=「条件の順番」
という意識を必ず持ってください。


ElseIfと複数条件(And / Or)の組み合わせ

例:点数と会員フラグでメッセージを変える

Sub SampleElseIf_AndOr()

    Dim score As Long
    Dim isMember As Boolean

    score = 75
    isMember = True

    If score >= 80 And isMember = True Then
        MsgBox "会員の高得点者です"
    ElseIf score >= 80 Then
        MsgBox "非会員の高得点者です"
    ElseIf score >= 60 Then
        MsgBox "合格です"
    Else
        MsgBox "不合格です"
    End If

End Sub
VB

ここでも、「上から順に判定される」ことが効いてきます。

  1. まず「80以上かつ会員か?」
  2. ダメなら「80以上か?」
  3. それもダメなら「60以上か?」
  4. どれもダメなら不合格

という流れです。

ElseIf と And / Or を組み合わせるときは、
「日本語に言い換えて、上から順に読んで意味が通るか」
を必ず確認してください。


ElseIfでよくあるつまずきポイント

つまずき1:Else If と書いてしまう

正しいのは ElseIf(スペースなし)です。

' NG
Else If score >= 80 Then

' OK
ElseIf score >= 80 Then
VB

Else If と書くと、
「Else のあとに、別の If 文が来た」と解釈されてしまい、
構文エラーや意図しないネストになります。

「ElseIf は一語」
これは指が覚えるまで意識して打ってください。

つまずき2:条件がかぶっている

If score >= 60 Then
    MsgBox "60以上"
ElseIf score >= 70 Then
    MsgBox "70以上"
End If
VB

このように書くと、70以上の人も最初の「60以上」で止まってしまい、
二つ目の条件には絶対に到達しません。

「上から順に判定される」「最初にTrueになったところで止まる」
この2つを常に頭の片隅に置いておくと、こういうミスに気づきやすくなります。


ElseIfを設計するときの“思考の順番”

1. まず日本語で分岐パターンを書く

いきなりコードにしないで、紙や頭の中でこう整理してみてください。

  • 90点以上 → S
  • 80点以上 → A
  • 70点以上 → B
  • 60点以上 → C
  • それ以外 → D

この「日本語の順番」が、そのまま ElseIf の順番になります。

2. 「広い条件」から「狭い条件」へ

基本的には、

  • より“厳しい条件”(範囲が狭いもの)を上に
  • より“ゆるい条件”(範囲が広いもの)を下に

という並べ方をすると、きれいにハマります。

さっきの例なら、

  • 90以上(かなり狭い)
  • 80以上(90未満も含む)
  • 70以上
  • 60以上
  • それ以外

という順番ですね。

ElseIf は「上から順にチェックして、最初に当てはまったところで止まる」ので、
「どの条件がどの範囲をカバーしているか」を意識して並べるのがコツです。


まとめ:ElseIfは「多段階のIfをきれいに並べるための道具」

ElseIf 自体は、If文の“おまけ機能”に見えるかもしれませんが、
実務レベルのコードではほぼ必ず登場する、かなり重要な構文です。

押さえておきたいポイントをコンパクトにまとめると、

  • ElseIf は「条件が3つ以上あるときの分岐」をきれいに書くためのもの
  • 上から順に判定され、最初にTrueになったブロックだけが実行される
  • 条件の順番=ロジックそのものなので、並べ方が超重要
  • ElseIf は一語(Else If は別物)
  • まず日本語で分岐パターンを書いてから、ElseIf に落とし込むと失敗しにくい

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