• 公開日:
  • 更新日:

ExcelのVBA(マクロ)でIf~Then~Elseを使って条件分岐する方法

ExcelではIF関数を使用することで条件を満たす場合と満たさない場合で処理を分けることができますが、VBA(マクロ)でもIf文を使用すれば同じように条件分岐することができます。

この記事では、VBAのIf文の基本から複数条件を指定する方法、If文を入れ子(ネスト)にする方法も解説しています。

動作するサンプルコード付きなのでVBAに詳しくない方でも動作させることができます。

Excelを使った日付選択のマクロを無料でダウンロード!

Excelでカレンダーから日付を入力できるマクロを無料でダウンロードできます。コードを変更すれば、カレンダーの背景色や、今日の日付の色を変更したりとカスタマイズすることも可能です。

If~Then~Elseを使った条件分岐

構文

If 条件式 Then

 条件式が成立した場合に実行する処理

Else 

 条件式が成立しなかった場合に実行する処理

End If

条件式を判定し、条件を満たしている場合は、Then以降の処理を実行します。条件式を満たさない場合は、Else以降の処理を実行します。

条件式には真(True)か偽(False)を返す数式または文字列式を指定します。比較演算子や論理演算子が使用できます。

If 条件式 Then

 条件式が成立した場合に実行する処理

End If

Else以降は省略することもできます。

フローチャート

構文をフローチャート(流れ図)で表しました。条件式の判定結果によって実行される処理が分岐します。

条件式がTrueのとき、「A」が実行されます。反対にFalseの場合、「B」が実行されます。

比較演算子

条件式で値を比較するには比較演算子という「>」や「=」が使用できます。条件式で使用できる比較演算子は下記の表をご覧ください。

比較演算子 意味 読み方
A > B AはBよりも大きい 大なり(だいなり)
A >= B AはB以上 大なりイコール
A < B AはBよりも小さい 小なり(しょうなり)
A <= B AはB以下 小なりイコール
A = B AはBと等しい 等号、イコール
A <> B AとBは等しくない 山カッコ、大なり小なり

論理演算子

複数の条件において「すべての条件を満たす」「いずれかの条件を満たす」などを判定したいときは論理演算子を使います。

条件式で使用できる論理演算子は下記の表をご覧ください。

論理演算子 意味 読み方
A And B AかつB(AとBの両方を満たす) アンド
A Or B AまたはB(AかBのいずれか1つを満たす) オア
Not A Aではない ノット

使用例

VBAのコードの中で「If~Then~Else」がどのように使用されるのか使い方をご紹介します。

条件分岐する表を準備する

上図は名前ごとに点数の結果が入力されています。B2セルが70点以上だったらC2セルに「合格」、そうでなければ「不合格」とVBAで書いてみましょう。


Sub sample()

    If Cells(2, 2) >= 70 Then
    
        Cells(2, 3) = "合格"
        
    Else
    
        Cells(2, 3) = "不合格"
        
    End If

End Sub

VBAで「If~Then~Else」を使ったサンプルになります。

  • 2行目:「Cells(2, 2) >= 70」が条件式です。B2セルが70点以上かどうかを判定します。
  • 3行目:B2セルが70点以上の場合、C2セルに「合格」を入力します。
  • 5行目:B2セルが70点以上でない場合、C2セルに「不合格」を入力します。

手順で使用するフォーマットのダウンロードはこちら

If~Then~Elseの使い方(実践)

ExcelのVBAでIf~Then~Elseを使った条件分岐を実際にやってみましょう

VBAのコードを記述するためにVBE(Visual Basic Editor)を起動します。①リボンから【開発】タブを選択し、②【Visual Basic】を押します。

ソースコードを入力し、実行する

Visual Basic Editorが起動したら①対象のシートを【ダブルクリック】し、②ソースコードを記述して③【▶】ボタンを押します。※ソースコードは記事内の「使用例」をご参考ください

VBA(マクロ)の実行結果

VBAを実行した後にシートに戻ると例ではC2セルに「合格」と入力されました。VBAのIf文でB2セルが70点以上かどうかを判定した結果、条件を満たす処理が実行されました。

ElseIfを使った複数条件の分岐

複数の条件によって3つ以上の処理に分岐させたい場合、ElseIf文を使用します。複数の条件式で判定することができ、3つ、4つ以上の処理に分岐させることも可能です。

ElseIf文は下記のように記述します。

If 条件式1 Then

 条件式1が成立した場合に実行する処理

ElseIf 条件式2 Then

 条件式2が成立した場合に実行する処理

Else 

 どの条件式も成立しなかった場合に実行する処理

End If

条件式1を判定し、条件を満たしている場合は、直近のThen以降の処理を実行します。条件式1を満たさない場合は、次の条件式2を判定し、条件を満たしている場合は、直近のThen以降の処理を実行します。すべての条件式を満たさない場合は、Else以降の処理を実行します。

ElseIf文は複数追加することにより、4つ以上の処理に分岐できます。

フローチャート

構文をフローチャート(流れ図)で表しました。条件式1、条件式2の判定結果によって実行される処理が分岐します。

条件式1がTrueのとき、「A」が実行し、Falseの場合は条件式2を判定します。条件式2がTrueのとき、「B」が実行し、Falseの場合は「C」を実行します。

条件分岐する表を準備する

上図は名前ごとに点数の結果が入力されています。B2セルが80点以上だったらC2セルに「◎」、60点以上だったら「○」、いずれかでもなければ「×」とVBAで書いてみましょう。


Sub sample()

    If Cells(2, 2) >= 80 Then
    
        Cells(2, 3) = "◎"
        
    ElseIf Cells(2, 2) >= 60 Then
    
        Cells(2, 3) = "○"
        
    Else
    
        Cells(2, 3) = "×"
        
    End If

End Sub

VBAで「ElseIf」を使ったサンプルになります。

  • 2行目:「Cells(2, 2) >= 80」が1つ目の条件式です。B2セルが80点以上かどうかを判定します。
  • 3行目:B2セルが80点以上の場合、C2セルに「◎」を入力します。
  • 4行目:「Cells(2, 2) >= 60」が2つ目の条件式です。B2セルが60点以上かどうかを判定します。
  • 5行目:B2セルが60点以上の場合、C2セルに「○」を入力します。
  • 7行目:B2セルが60点以上でない場合、C2セルに「×」を入力します。

論理演算子Andを使って複数条件(かつ)を設定する方法

複数の条件式をすべて満たす場合を判定したいときは論理演算子AndとIfを組み合わせます。

If文の中で使用するAndは下記のように記述します。


If 条件式1 And 条件式2 Then

 条件式1と条件式2の両方とも成立した場合に実行する処理

Else

 条件式1と条件式2のいずれか成立しない場合に実行する処理

End If

条件式1、条件式2をそれぞれ判定し、2つとも条件を満たしている場合は、Then以降の処理を実行します。条件式1と条件式2のどちらか満たさない場合は、Else以降の処理を実行します。

And フローチャート

Andの処理の流れのイメージとしてフローチャート(流れ図)で表しました。条件式1、条件式2の判定結果によって実行される処理が分岐します。

条件式1がTrueのとき、条件式2を判定します。条件式2がTrueのとき、「A」が実行します。条件式1、条件式2いずれかがFalseの場合は「B」を実行します。

VBAを記述するシート

上図は名前ごとに「国語」「数学」「英語」の結果が入力されています。B2、C2、D2セルがすべて80点以上だったらE2セルに「合格」、それ以外だったら「不合格」とVBAで書いてみましょう。


Sub sample()

    If Cells(2, 2) >= 80 And Cells(2, 3) >= 80 And Cells(2, 4) >= 80 Then
    
        Cells(2, 5) = "合格"
        
    Else
    
        Cells(2, 5) = "不合格"
        
    End If

End Sub

VBAで「And」を使ったサンプルになります。

  • 2行目:「Cells(2, 2) >= 80」「Cells(2, 3) >= 80」「Cells(2, 4) >= 80」をAndでつなげています。すべて80点以上かどうかを判定します。
  • 3行目:B2、C2、D2セルがすべて80点以上の場合、E2セルに「合格」を入力します。
  • 5行目:B2、C2、D2セルのいずれかが80点以上でない場合、E2セルに「不合格」を入力します。

論理演算子Orを使って複数条件(または)を設定する方法

複数の条件式のいずれかを満たしているかどうかを判定したいときは論理演算子OrとIfを組み合わせます。

If文の中で使用するOrは下記のように記述します。


If 条件式1 Or 条件式2 Then

 条件式1か条件式2のどちらかが成立した場合に実行する処理

Else

 条件式1と条件式2の両方とも成立しない場合に実行する処理

End If

条件式1、条件式2をそれぞれ判定し、1つでも条件を満たしている場合は、Then以降の処理を実行します。条件式1と条件式2のどちらも満たさない場合は、Else以降の処理を実行します。

Orフローチャート

Orの処理の流れのイメージとしてフローチャート(流れ図)で表しました。条件式1、条件式2の判定結果によって実行される処理が分岐します。

条件式1がTrueのとき、「A」が実行します。Falseの場合は条件式2を判定します。条件式2がTrueのとき、「A」が実行します。条件式1、条件式2どちらもFalseの場合は「B」を実行します。

VBAを記述するシート

上図は名前ごとに「国語」「数学」「英語」の結果が入力されています。B2、C2、D2セルのいずれかが80点以上だったらE2セルに「合格」、それ以外だったら「不合格」とVBAで書いてみましょう。


Sub sample()

    If Cells(2, 2) >= 80 Or Cells(2, 3) >= 80 Or Cells(2, 4) >= 80 Then
    
        Cells(2, 5) = "合格"
        
    Else
    
        Cells(2, 5) = "不合格"
        
    End If

End Sub

VBAで「Or」を使ったサンプルになります。

  • 2行目:「Cells(2, 2) >= 80」「Cells(2, 3) >= 80」「Cells(2, 4) >= 80」をOrでつなげています。いずれかが80点以上かどうかを判定します。
  • 3行目:B2、C2、D2セルがいずれか80点以上の場合、E2セルに「合格」を入力します。
  • 5行目:B2、C2、D2セルのすべて80点以上でない場合、E2セルに「不合格」を入力します。

If文の入れ子(ネスト)の使い方

If文の中にさらにIf文を入れることができます。これをIf文の入れ子(ネスト)と呼びます。

If文の入れ子(ネスト)は下記のように記述します。


If 条件式1 Then

 If 条件式2 Then
  
  条件式1かつ条件式2が成立した場合に実行する処理
    
 Else

  条件式1は成立するが、条件式2が成立しない場合に実行する処理

 End If

Else

 条件式1が成立しない場合に実行する処理

End If

まず条件式1を判定し、条件を満たしている場合は条件式2を判定します。満たしていない場合は最後のElse以降の処理を実行します。

条件式2を判定し、条件を満たしている場合は、直近のThen以降の処理を実行します。条件式2を満たしていない場合は、直近のElse以降の処理を実行します。

If文の入れ子のフローチャート

構文をフローチャート(流れ図)で表しました。条件式1、条件式2の判定結果によって実行される処理が分岐します。

条件式1がTrueのとき、条件式2を判定します。Falseのときは「C」を実行します。条件式2がTrueのとき、「A」が実行します。Falseの場合は「B」を実行します。

If文のネストの例

上図は旅行先ごとに旅費が入力されています。B2セルが10万円以下だったらC2セルに「検討」、10万円を超える場合は「貯金」、さらに7万円以下だったら「計画」とVBAで書いてみましょう。


Sub sample()

    If Cells(2, 2) <= 100000 Then
    
        If Cells(2, 2) <= 70000 Then
        
            Cells(2, 3) = "計画"
        
        Else
        
            Cells(2, 3) = "検討"
            
        End If

    Else
    
        Cells(2, 3) = "貯金"
        
    End If

End Sub

VBAで「If文の入れ子(ネスト)」を使ったサンプルになります。

  • 2行目:「Cells(2, 2) <= 100000」が1つ目の条件式です。B2セルが10万円以下かどうかを判定します。
  • 3行目:「Cells(2, 2) <= 70000」が2つ目の条件式です。B2セルが7万円以下かどうかを判定します。
  • 3行目:B2セルが7万円以下の場合、C2セルに「計画」を入力します。
  • 6行目:B2セルが10万円以下、7万円を超える場合、C2セルに「検討」を入力します。
  • 9行目:B2セルが10万円以下でない場合、C2セルに「貯金」を入力します。