- 公開日:
- 更新日:
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を実行した後にシートに戻ると例では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の処理の流れのイメージとしてフローチャート(流れ図)で表しました。条件式1、条件式2の判定結果によって実行される処理が分岐します。
条件式1がTrueのとき、条件式2を判定します。条件式2がTrueのとき、「A」が実行します。条件式1、条件式2いずれかがFalseの場合は「B」を実行します。
上図は名前ごとに「国語」「数学」「英語」の結果が入力されています。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の処理の流れのイメージとしてフローチャート(流れ図)で表しました。条件式1、条件式2の判定結果によって実行される処理が分岐します。
条件式1がTrueのとき、「A」が実行します。Falseの場合は条件式2を判定します。条件式2がTrueのとき、「A」が実行します。条件式1、条件式2どちらもFalseの場合は「B」を実行します。
上図は名前ごとに「国語」「数学」「英語」の結果が入力されています。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以降の処理を実行します。
構文をフローチャート(流れ図)で表しました。条件式1、条件式2の判定結果によって実行される処理が分岐します。
条件式1がTrueのとき、条件式2を判定します。Falseのときは「C」を実行します。条件式2がTrueのとき、「A」が実行します。Falseの場合は「B」を実行します。
上図は旅行先ごとに旅費が入力されています。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セルに「貯金」を入力します。