VBAでElseIfを使った条件分岐の方法|If文との違いや活用例を解説

VBAの条件分岐とは 2026

ExcelのVBAでマクロを書いていると、「値によって処理を変えたい」「複数の条件を判定したい」という場面が必ず出てきます。そのときに使うのがElseIfを使った条件分岐です。

しかし「IfとElseIfの違いが分からない」「条件が増えるたびにコードが複雑になってしまう」「どの順番で書けばいいのか迷う」という悩みを持つ方も多いのではないでしょうか。

本記事では、VBAのElseIfの基本構文から、具体的なコード例、よくある注意点、Select Caseとの使い分けまでを初心者の方でも理解できるよう順序立てて解説します。読み終えたあとには、複数条件の分岐を自信を持って書けるようになります。

  1. VBAの条件分岐とは
    1. If文の基本構造
    2. 条件分岐の重要性
    3. 複数条件を扱う場面
      1. 値によって処理を変えたい場合
      2. 複雑な判定を簡潔に書きたい場合
  2. VBA ElseIfの基本構文
    1. ElseIfの書き方
    2. If~ElseIf~Elseの順序
    3. 複数条件を連続で判定する例
      1. 数値の範囲判定
      2. 文字列の一致判定
  3. VBA If Elseとの違い
    1. 単純な条件分岐と複数条件分岐の違い
    2. ElseIfを使うメリット
      1. ネストが深くならない
      2. コードが読みやすくなる
  4. ElseIfを使った具体例
    1. 数値による判定例
    2. 文字列による判定例
    3. セルの値に応じた処理例
      1. Excelのセルに応じてメッセージを表示
      2. 条件に応じて書式を変更
  5. ElseIfを使う際の注意点
    1. 条件の順序に注意する
    2. 重複条件に注意する
    3. ネストを深くしすぎない
      1. 読みやすさを意識する
      2. 無駄な条件チェックを避ける
  6. 複雑な条件分岐の書き方
    1. Select Caseとの使い分け
    2. 論理演算子を使った条件判定
    3. 複数条件を組み合わせる例
      1. AND、ORを使った複雑な判定
      2. ElseIfとの組み合わせによる簡潔化
  7. VBA ElseIfの活用テクニック
    1. 処理を関数化してElseIf内で呼び出す
    2. 条件ごとに処理をまとめる
    3. 可読性を高めるコメントの付け方
      1. 条件ごとに意味をコメントする
      2. 処理内容を簡潔に説明
  8. ElseIfを使った実践例
    1. 成績評価の自動判定
    2. 営業成績に応じたメッセージ表示
    3. 在庫状況に応じたアラート表示
      1. 複数条件を簡潔に記述する方法
      2. エラー処理を組み合わせる方法
  9. まとめ
    1. VBA ElseIfは複数条件分岐を簡潔に書くための基本構文
    2. 条件の順序や重複に注意する
    3. Select Caseや論理演算子と組み合わせるとより便利
    4. 可読性を意識して実務で活用できる

VBAの条件分岐とは

VBAの条件分岐とは

If文の基本構造

VBAの条件分岐の基本はIf文です。「もし〇〇なら△△する」という処理の流れを記述します。基本的な構文は以下のとおりです。

If 条件式 Then 処理 End If

条件式がTrueの場合だけ処理が実行され、Falseの場合は何もせずに次の行へ進みます。これが最もシンプルな条件分岐の形です。

条件分岐の重要性

マクロはすべての行を上から順番に実行しますが、現実の業務では「値によって違う処理をしたい」場面が多々あります。条件分岐がなければ、あらゆる状況に対応できる柔軟なマクロは作れません。

たとえば「売上が目標を超えていれば青、下回っていれば赤でセルを塗る」といった処理は、条件分岐なしでは実現できません。

複数条件を扱う場面

値によって処理を変えたい場合

点数が90点以上なら「優」、70点以上なら「良」、50点以上なら「可」、それ未満なら「不可」——このように3つ以上の処理の分岐が必要な場合、単純なIf文だけでは対応が難しくなります。ElseIfを使うことで、複数の条件を一連の構文としてすっきり記述できます。

複雑な判定を簡潔に書きたい場合

条件が増えるほど、コードが長くなり可読性が下がります。ElseIfを正しく使うことで、複雑な判定ロジックを整理された形で記述でき、後からコードを読んだときに意図が伝わりやすくなります。

VBA 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との違い

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 message

End 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 If

End 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 If

End 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の前に組み込むと安全なマクロになる
See also  IPアドレスを変更する方法|確認手順・固定IP設定・注意点を解説
Copied title and URL