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
VBscore が 85 のときの流れを追ってみます。
score >= 90→ 85 >= 90 は Falsescore >= 80→ 85 >= 80 は True- ここで「評価: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
VBIf score >= 80 Then
MsgBox "80点以上"
ElseIf score >= 60 Then
MsgBox "60点以上"
End If
VB一見、同じ条件を使っているように見えますが、
上のコードは「80点以上でも、最初の条件(60以上)で止まってしまう」ので、
80点の人に「60点以上」と表示されてしまいます。
下のコードは、
- まず「80以上か?」をチェック
- ダメなら「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ここでも、「上から順に判定される」ことが効いてきます。
- まず「80以上かつ会員か?」
- ダメなら「80以上か?」
- それもダメなら「60以上か?」
- どれもダメなら不合格
という流れです。
ElseIf と And / Or を組み合わせるときは、
「日本語に言い換えて、上から順に読んで意味が通るか」
を必ず確認してください。
ElseIfでよくあるつまずきポイント
つまずき1:Else If と書いてしまう
正しいのは ElseIf(スペースなし)です。
' NG
Else If score >= 80 Then
' OK
ElseIf score >= 80 Then
VBElse 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 に落とし込むと失敗しにくい
