ExcelのVBAでマクロを書いていると、「値によって処理を変えたい」「複数の条件を判定したい」という場面が必ず出てきます。そのときに使うのがElseIfを使った条件分岐です。
しかし「IfとElseIfの違いが分からない」「条件が増えるたびにコードが複雑になってしまう」「どの順番で書けばいいのか迷う」という悩みを持つ方も多いのではないでしょうか。
本記事では、VBAのElseIfの基本構文から、具体的なコード例、よくある注意点、Select Caseとの使い分けまでを初心者の方でも理解できるよう順序立てて解説します。読み終えたあとには、複数条件の分岐を自信を持って書けるようになります。
VBAの条件分岐とは

If文の基本構造
VBAの条件分岐の基本はIf文です。「もし〇〇なら△△する」という処理の流れを記述します。基本的な構文は以下のとおりです。
If 条件式 Then
処理
End If
条件式がTrueの場合だけ処理が実行され、Falseの場合は何もせずに次の行へ進みます。これが最もシンプルな条件分岐の形です。
条件分岐の重要性
マクロはすべての行を上から順番に実行しますが、現実の業務では「値によって違う処理をしたい」場面が多々あります。条件分岐がなければ、あらゆる状況に対応できる柔軟なマクロは作れません。
たとえば「売上が目標を超えていれば青、下回っていれば赤でセルを塗る」といった処理は、条件分岐なしでは実現できません。
複数条件を扱う場面
値によって処理を変えたい場合
点数が90点以上なら「優」、70点以上なら「良」、50点以上なら「可」、それ未満なら「不可」——このように3つ以上の処理の分岐が必要な場合、単純なIf文だけでは対応が難しくなります。ElseIfを使うことで、複数の条件を一連の構文としてすっきり記述できます。
複雑な判定を簡潔に書きたい場合
条件が増えるほど、コードが長くなり可読性が下がります。ElseIfを正しく使うことで、複雑な判定ロジックを整理された形で記述でき、後からコードを読んだときに意図が伝わりやすくなります。
VBA ElseIfの基本構文

ElseIfの書き方
ElseIfはIfブロックの中に追加の条件を続けて記述するための構文です。基本的な書き方は以下のとおりです。
If 条件式1 Then
処理1
ElseIf 条件式2 Then
処理2
ElseIf 条件式3 Then
処理3
Else
どれにも当てはまらない場合の処理
End If
重要なポイントは、ElseIfはスペースなしの1つの単語として書くことです。「Else If」と分けて書くとエラーになります。
If~ElseIf~Elseの順序
条件の評価は上から順番に行われます。最初に一致した条件の処理だけが実行され、それ以降の条件は評価されません。この仕組みを理解しておくことが、正しい条件分岐を書くうえで重要です。
- If:最初に評価する条件(必須)
- ElseIf:2番目以降の条件(0個以上、何個でも追加できる)
- Else:どの条件にも該当しない場合(任意)
- End If:条件ブロックの終了(必須)
複数条件を連続で判定する例
数値の範囲判定
変数scoreの値に応じて評価を表示するコード例です。
Dim score As Integer
score = 75
If score >= 90 Then MsgBox "優" ElseIf score >= 70 Then MsgBox "良" ElseIf score >= 50 Then MsgBox "可" Else MsgBox "不可" End If
この例ではscore = 75のため、最初の条件(90以上)はFalse、次の条件(70以上)がTrueとなり「良」と表示されます。
文字列の一致判定
文字列の比較にもElseIfが使えます。
Dim dayType As String
dayType = "土曜日"
If dayType = "平日" Then MsgBox "通常営業" ElseIf dayType = "土曜日" Then MsgBox "半日営業" ElseIf dayType = "日曜日" Then MsgBox "休業" Else MsgBox "祝日" End If
VBA If Elseとの違い

単純な条件分岐と複数条件分岐の違い
If~Elseは2択の分岐です。条件がTrueかFalseかで処理が分かれます。
If score >= 60 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If
一方、ElseIfを加えることで3択以上の分岐が可能になります。2つの分岐で済む場合はIf~Elseで十分ですが、判定パターンが3つ以上ある場合にElseIfが必要になります。
| 構文 | 分岐パターン | 向いている場面 |
|---|---|---|
| If~End If | 1択(条件を満たす場合のみ) | 単一条件の処理 |
| If~Else~End If | 2択 | YesかNoの二者択一 |
| If~ElseIf~Else~End If | 3択以上 | 複数の条件を段階的に判定 |
ElseIfを使うメリット
ネストが深くならない
ElseIfを使わずにIfのネスト(入れ子)で複数条件を書くと、以下のようにインデントが深くなり読みにくくなります。
' ネストを深くした書き方(非推奨)
If score >= 90 Then
MsgBox "優"
Else
If score >= 70 Then
MsgBox "良"
Else
If score >= 50 Then
MsgBox "可"
Else
MsgBox "不可"
End If
End If
End If
ElseIfを使えば同じ処理をフラットに書けます。
コードが読みやすくなる
ElseIfを使った場合、条件の並びが一目で把握できるため、コードの意図が伝わりやすくなります。チームでの開発や、後からコードを修正する際にも大きなメリットになります。
ElseIfを使った具体例
数値による判定例
売上金額に応じてランクを判定するコード例です。
Dim sales As Long
sales = 850000
Dim rank As String
If sales >= 1000000 Then rank = "Sランク" ElseIf sales >= 800000 Then rank = "Aランク" ElseIf sales >= 600000 Then rank = "Bランク" ElseIf sales >= 400000 Then rank = "Cランク" Else rank = "Dランク" End If
MsgBox "売上ランク:" & rank
sales = 850000の場合、100万以上の条件はFalse、80万以上の条件がTrueとなり「Aランク」が表示されます。
文字列による判定例
部署名に応じて処理を変える例です。
Dim dept As String
dept = "営業部"
If dept = "営業部" Then MsgBox "売上報告書を提出してください" ElseIf dept = "開発部" Then MsgBox "進捗報告書を提出してください" ElseIf dept = "総務部" Then MsgBox "勤怠確認を行ってください" Else MsgBox "担当者に確認してください" End If
セルの値に応じた処理例
Excelのセルに応じてメッセージを表示
セルA1の値を読み込んで条件分岐する実践的な例です。
Dim cellValue As Integer
cellValue = Range("A1").Value
If cellValue >= 90 Then Range("B1").Value = "優秀" ElseIf cellValue >= 70 Then Range("B1").Value = "良好" ElseIf cellValue >= 50 Then Range("B1").Value = "普通" Else Range("B1").Value = "要改善" End If
セルA1の数値を読み込み、評価結果をB1セルに書き込みます。
条件に応じて書式を変更
セルの背景色を条件によって変える例です。
Dim val As Integer
val = Range("A1").Value
If val >= 80 Then Range("A1").Interior.Color = RGB(0, 255, 0) ' 緑 ElseIf val >= 60 Then Range("A1").Interior.Color = RGB(255, 255, 0) ' 黄 Else Range("A1").Interior.Color = RGB(255, 0, 0) ' 赤 End If
ElseIfを使う際の注意点
条件の順序に注意する
ElseIfの条件は上から順番に評価されるため、条件の順序が結果に直接影響します。範囲の広い条件を先に書くと、後の条件に到達しないことがあります。
以下は誤った順序の例です。
' 誤った例:条件の順序が逆
If score >= 50 Then
MsgBox "可" ' scoreが90でもここに当てはまってしまう
ElseIf score >= 70 Then
MsgBox "良" ' ここには絶対に到達しない
ElseIf score >= 90 Then
MsgBox "優" ' ここにも到達しない
End If
範囲の狭い条件(より高い閾値)から順に書くことが基本です。
重複条件に注意する
複数の条件が同じ値を対象にしていると、最初にTrueになった条件だけが実行されます。条件同士が重複していないかを確認しながら記述しましょう。
ネストを深くしすぎない
読みやすさを意識する
ElseIfで対応できる条件分岐をネストで書くと、コードの可読性が著しく下がります。ElseIfで横に並べて書ける場合は、ネストを使わない方針を基本にしましょう。
無駄な条件チェックを避ける
すでに上の条件でFalseと判定された範囲は、下のElseIfで再度チェックする必要はありません。前の条件が評価済みであることを前提に、次の条件式をシンプルに書くことがポイントです。
複雑な条件分岐の書き方
Select Caseとの使い分け
同じ変数を複数の値と比較する場合は、ElseIfよりもSelect Caseの方がすっきり書けることがあります。
' ElseIfで書いた場合
If color = "赤" Then
MsgBox "停止"
ElseIf color = "黄" Then
MsgBox "注意"
ElseIf color = "緑" Then
MsgBox "進行"
End If
' Select Caseで書いた場合 Select Case color Case "赤" MsgBox "停止" Case "黄" MsgBox "注意" Case "緑" MsgBox "進行" End Select
同一変数の値を複数の固定値と比較するならSelect Case、範囲や複合条件が必要ならElseIfが適しています。
論理演算子を使った条件判定
1つの条件式に複数の判定を組み合わせる場合は、ANDやORの論理演算子を使います。
| 演算子 | 意味 | 例 |
|---|---|---|
| And | 両方の条件がTrueの場合 | score >= 60 And attendance >= 80 |
| Or | どちらかの条件がTrueの場合 | dept = “営業” Or dept = “販売” |
| Not | 条件がFalseの場合 | Not IsEmpty(Range(“A1”)) |
複数条件を組み合わせる例
AND、ORを使った複雑な判定
Dim score As Integer
Dim attendance As Integer
score = 75
attendance = 85
If score >= 80 And attendance >= 90 Then MsgBox "優秀賞対象" ElseIf score >= 70 And attendance >= 80 Then MsgBox "良好評価" ElseIf score >= 60 Or attendance >= 90 Then MsgBox "条件一部達成" Else MsgBox "要改善" End If
ElseIfとの組み合わせによる簡潔化
ANDやORを使うことで、本来なら多段階のネストが必要な条件を1つのElseIf行にまとめられます。ただし条件式が長くなりすぎると読みにくくなるため、変数に条件を入れて整理する工夫も有効です。
VBAのIf文の詳しい仕様については、Microsoft公式ドキュメント「If…Then…Elseステートメントの使い方」も参照してください。
VBA ElseIfの活用テクニック
処理を関数化してElseIf内で呼び出す
ElseIf内の処理が長くなる場合は、処理を別のSubプロシージャやFunctionに切り出して呼び出す形にすると、コードが整理されます。
Sub CheckScore(score As Integer)
If score >= 90 Then
Call ShowExcellent
ElseIf score >= 70 Then
Call ShowGood
ElseIf score >= 50 Then
Call ShowPass
Else
Call ShowFail
End If
End Sub
Sub ShowExcellent() MsgBox "優秀です!継続してください。" End Sub
Sub ShowGood() MsgBox "良好です。さらに上を目指しましょう。" End Sub
各条件ブロックがシンプルになり、コード全体の見通しが良くなります。
条件ごとに処理をまとめる
ElseIfの各ブロックは、関連する処理をひとまとめにして書きましょう。セルへの書き込み、色の変更、メッセージ表示など、同じ条件に関連する操作は同じブロック内に記述すると、後から修正しやすくなります。
可読性を高めるコメントの付け方
条件ごとに意味をコメントする
条件式の意味が数字だけでは分かりにくい場合は、コメントで補足します。
If score >= 90 Then ' 90点以上:優評価
result = "優"
ElseIf score >= 70 Then ' 70点以上89点以下:良評価
result = "良"
ElseIf score >= 50 Then ' 50点以上69点以下:可評価
result = "可"
Else ' 49点以下:不可評価
result = "不可"
End If
処理内容を簡潔に説明
処理が複数行にわたる場合は、ブロックの先頭に処理の概要をコメントとして記述しておくと、後から読んだときに理解しやすくなります。特に業務システムや引き継ぎが発生する環境では、コメントの有無が保守性に大きく影響します。
ElseIfを使った実践例
成績評価の自動判定
A列に点数が入力されているシートで、B列に評価を自動入力するマクロです。
Sub EvaluateScores()
Dim i As Integer
Dim score As Integer
Dim lastRow As Integer
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' データの最終行を取得
For i = 2 To lastRow ' 2行目から最終行までループ
score = Cells(i, 1).Value ' A列の点数を取得
If score >= 90 Then
Cells(i, 2).Value = "優"
ElseIf score >= 70 Then
Cells(i, 2).Value = "良"
ElseIf score >= 50 Then
Cells(i, 2).Value = "可"
Else
Cells(i, 2).Value = "不可"
End If
Next i
MsgBox "評価の入力が完了しました。"End Sub
営業成績に応じたメッセージ表示
月次売上をもとに担当者へのフィードバックメッセージを生成するマクロです。
Sub ShowSalesFeedback()
Dim sales As Long
sales = Range("B2").Value ' 売上セルを読み込む
Dim message As String
If sales >= 1000000 Then
message = "目標を大きく達成!来月も期待しています。"
ElseIf sales >= 800000 Then
message = "目標達成です。この調子で継続しましょう。"
ElseIf sales >= 600000 Then
message = "惜しい!あと一歩で目標達成でした。"
Else
message = "目標に届きませんでした。原因を振り返りましょう。"
End If
MsgBox messageEnd Sub
在庫状況に応じたアラート表示
在庫数に応じてセルの色とステータスを自動設定するマクロです。
Sub CheckInventory()
Dim stock As Integer
stock = Range("C2").Value ' 在庫数を取得
If stock = 0 Then
Range("D2").Value = "在庫切れ"
Range("D2").Interior.Color = RGB(255, 0, 0) ' 赤
ElseIf stock <= 10 Then
Range("D2").Value = "在庫少"
Range("D2").Interior.Color = RGB(255, 165, 0) ' オレンジ
ElseIf stock <= 50 Then
Range("D2").Value = "在庫あり"
Range("D2").Interior.Color = RGB(255, 255, 0) ' 黄
Else
Range("D2").Value = "在庫十分"
Range("D2").Interior.Color = RGB(0, 255, 0) ' 緑
End IfEnd Sub
複数条件を簡潔に記述する方法
上記のような実務マクロでは、ElseIfを使うことで在庫ゼロ・少量・通常・十分の4段階をフラットに記述できます。ネストを使った場合に比べてコードの意図が伝わりやすく、条件の追加・変更もしやすくなります。
エラー処理を組み合わせる方法
実務では入力値が想定外の場合も考慮する必要があります。ElseIfと合わせてエラー処理を組み込む例です。
Sub SafeEvaluate()
Dim score As Variant
score = Range("A1").Value
' 空白・非数値のチェック
If IsEmpty(score) Or Not IsNumeric(score) Then
MsgBox "有効な数値を入力してください。"
Exit Sub
End If
' 数値範囲のチェック
If score < 0 Or score > 100 Then
MsgBox "0から100の範囲で入力してください。"
Exit Sub
End If
' 評価判定
If score >= 90 Then
MsgBox "優"
ElseIf score >= 70 Then
MsgBox "良"
ElseIf score >= 50 Then
MsgBox "可"
Else
MsgBox "不可"
End IfEnd Sub
VBAのIf文とElseIfの使い方についての詳細な解説は、ExcelVBA解説「If文とElseIfの使い方」、オフィスハック「VBAのIf文完全ガイド」、だいたいIT「VBA If文の使い方と活用例」も参考になります。
VBAをはじめとするExcel活用術や業務効率化のヒントは、kakiro-web.comでも幅広く解説しています。
まとめ
VBA ElseIfは複数条件分岐を簡潔に書くための基本構文
ElseIfはIf文に続けて複数の条件を追加できる構文で、3つ以上の処理パターンが必要な場面で活躍します。ネストを深くせずにフラットな構造で書けるため、コードの可読性が高まります。
条件の順序や重複に注意する
ElseIfは上から順番に条件を評価し、最初にTrueになった条件のみを実行します。範囲の広い条件を先に書くと後の条件に到達しなくなるため、閾値の高い条件から順に記述することが基本です。
Select Caseや論理演算子と組み合わせるとより便利
同じ変数を固定値と比較する場合はSelect Caseが読みやすく、複合条件が必要な場合はAndやOrと組み合わせることでElseIfをより柔軟に活用できます。状況に応じて使い分けましょう。
可読性を意識して実務で活用できる
コメントの活用、処理の関数化、条件ブロックの整理——これらを意識することで、自分以外の人が読んでも理解しやすい保守性の高いコードになります。
- ElseIfはスペースなしの1単語で書く
- 条件は閾値の高い順(範囲の狭い順)に記述する
- 同じ変数を固定値と比較するならSelect Caseも検討する
- 複合条件にはAndやOrの論理演算子を活用する
- 処理が長くなる場合は別のSubに切り出して呼び出す
- コメントを付けて条件の意味を明示する
- エラー処理をElseIfの前に組み込むと安全なマクロになる

