【Excel VBA】If~Then~ElseIfステートメントで複数条件を処理を分岐させる方法

【Excel VBA】If~Then~ElseIfステートメントで複数条件を処理を分岐させる方法

前回If~Then~Elseステートメントについて解説しました。

【Excel VBA】If~Then~Elseステートメントで1つの条件を満たした場合と満たさない場合の処理をそれぞれ設定する方法 | Excelを制する者は人生を制す ~No Excel No Life~

If~Then~Elseステートメントでは1つの条件に対して、満たした場合と満たさない場合の2つの処理を設定するだけでしたが、通常ワークシート上で使うIF関数と同様に複数の条件をネストすることが可能です。

その場合、If~Thenステートメントに条件の真偽で分岐をする部分に「ElseIf」を追加することになります。

これを「If~Then~ElseIfステートメント」と呼びます。

今回はIf~Then~ElseIfステートメントについて解説していきます。

Excelステップ講座

If~Then~ElseIfステートメントの基本構文

条件式1

1つ目の判断基準となる条件を指定します。

たとえば、”A4セルは○ですか?”というようなYES/NOでできる質問のことですね。

処理1

1つ目の論理式の結果が真(TRUE)の場合に行う処理を指定します。

上記で例えた”A4セルは○ですか?”という質問にYESの場合に設定しておく処理のことです。

条件式2以降

1つ前の判断基準が偽(FALSE)の場合に2つ目の判断基準となる条件を指定します。

条件式は2つ以上設定することが可能です。

処理2

2つ目の論理式の結果が真(TRUE)の場合に行う処理を指定します。(「ElseIf」の次の行)

処理3以降

条件式の数によって処理の数は変動しますが、条件式の数だけ真の場合(TRUE)の処理数が増えるイメージとなります。

そして条件式の数+1つの処理のみ、いずれの条件にも該当しない場合(論理式の結果が偽(FALSE))の場合の処理を指定します。(「Else」の次の行)

条件分岐のイメージ(フローチャート)

フォーマット関数の方のIF関数で使用した図と概念的にはまったく同じです。(下記参照)

フローチャートで理解するIF関数の条件分岐 | Excelを制する者は人生を制す ~No Excel No Life~

下図の「結果」は本記事中の「処理」と同義です。

IF関数フローチャート

使用例

80点以上で優良者として認定され、40点以上が及第点のテストがあったとします。

B2セルが点数、C2セルが合否欄で、B2セルが80以上の場合はC2セルの値が”◎”、40以上の場合はC2セルの値が”○”に、40未満の場合はC2セルの値が”×”なるように設定します。

If~Then~ElseIfステートメント①

2行目の「If」と「Then」の間が条件式1となります。

今回の条件1は「B2セルが80以上」なので「Range(“B2”).Value >= 80」となります。

続いて3行目が条件1を満たした場合の処理1を記述します。(条件1の真の場合)

処理は「C2セルの値を”◎”にする」なので「Range(“C2”).Value = “◎”」となります。

4行目に「ElseIf」と「Then」の間が条件式2となります。(条件1の偽の場合)

今回の条件2は「B2セルが40以上」なので「Range(“B2”).Value >= 40」となります。

5行目が条件2を満たした場合の処理2を記述します。(条件2の真の場合)

処理2は「C2セルの値を”○”にする」なので「Range(“C2”).Value = “○”」となります。

6行目に「Else」、7行目で条件を満たさない場合の処理を記述します。(条件2の偽の場合)

処理3は「C2セルの値を”×”にする」なので「Range(“C2”).Value = “×”」となります。

8行目に「End If」で締めて終了になります。

マクロの動作イメージ

If~Then~ElseIfステートメント②

C2セルが最初はブランクになっています。

If~Then~ElseIfステートメント③

マクロを起動すると、B2セルが80以上の値が入っていればC2セルに”◎”の値が返ります。

If~Then~ElseIfステートメント④

マクロを起動すると、B2セルが40以上の値が入っていればC2セルに”○”の値が返ります。

If~Then~ElseIfステートメント⑤

そして、B2セルが40未満の値であればC2セルに”×”の値が返ります。

Excel内の類似機能

If~Then~ElseIfステートメントに類似したExcelの代表的な機能は以下の2つです。

  • IF関数
  • 条件付き書式

なお、関連記事は下記をご参照ください。

IF関数 | Excelを制する者は人生を制す ~No Excel No Life~

条件付き書式 | Excelを制する者は人生を制す ~No Excel No Life~

なお、If~Then~ElseIfステートメントは上記のような値や書式などのプロパティに限らず、範囲選択やコピー・消去などのメソッドも設定できるため、より複雑な条件分岐を設定することが可能ですよ!

まとめ

If~Then~ElseIfステートメントはIf~Thenステートメントと同様に「マクロの記録」では設定できず、VBE経由でしか設定できません。

処理のエラー判定を行うにも、処理する範囲を絞るにも条件分岐が必要になります。

そのExcelを使う人がより使いやすいように工夫していくとよいですね。