If文の中にIf文を記述する
条件分岐として If 文を使用する場合、 If の中で実行される処理として別の If を記述することができます。このようにネストして If を記述することでより複雑な条件分岐を行うことができます。ここでは Excel VBA で If 文の中に別の If 文を記述する方法について解説します。
(Last modified: )
If文の中にIf文を記述する
Excel VBA における If
文の書式は次のようなものでした。
If 条件式 Then 条件式がTrueの時に行う処理 Else 条件式がFalseの時に行う処理 End If
条件式が「True」や「False」になったときに行う処理は、どのような処理でも記述することができるため、実行する処理として別の If
文を記述することができます。例えば次のように記述することができます。
If 条件式1 Then 条件式1がTrueの時に行う処理 If 条件式2 Then 条件式2がTrueの時に行う処理 Else 条件式2がFaleの時に行う処理 End If Else 条件式1がFalseの時に行う処理 End If
この場合、条件式 1 が「True」の場合、 Then
から Else
までの処理が実行されますが、この中に別の If
文が記述されています。そのため条件式 1 が「True」且つ条件式 2 が「True」の場合にだけ行う処理や、条件式 1 が「True」且つ条件式 2 が Flase
の場合だけ行う処理を記述することができます。
さらに階層を深くしてより複雑な条件式を記述することもできます。
If 条件式1 Then 条件式1がTrueの時に行う処理 If 条件式2 Then 条件式2がTrueの時に行う処理 Else If 条件式3 Then 条件式3がTrueのときに行う処理 End If End If Else If 条件式4 Then 条件式4がTrueの時に行う処理 End If 条件式1がFalseの時に行う処理 End If
なお 1 つの If
文で複数の条件式を使って条件分岐を行うこともできます。詳しくは「一度に複数の条件判断を行う(If..ElseIf)」を参照されてください。
それでは簡単なサンプルを作成してみます。
Option Explicit Sub テスト() Dim result As Integer Dim msg As String result = Range("B2").Value If result > 50 Then msg = "合格です" If result < 70 Then msg = msg & vbNewLine & "追加レポートが必要です" End If MsgBox msg Else MsgBox "不合格です" End If End Sub
B2 セルの値を取得し、最初の条件式で 50 よりも大きいかどうかを調べます。この条件式が「True」だった場合は、さらに別の If
文を使って 70 よりも小さいかどうかを調べ、この条件式が「True」の場合にはダイアログで表示するメッセージを追加しています。
それでは最初にワークシートの B2 セルに 84 と入力しました。
先ほどのプログラムを実行します。
今回は B2 セルの値が 50 よりも大きく、また 70 よりも小さくないので "合格です" とだけダイアログに表示されます。
次にワークシートの B2 セルの値を 68 に変更し、再度プログラムを実行してみました。今度はセルの値が 50 よりも大きいですが、 70 よりも小さいので表示されるメッセージが追加されて "合格です" "追加レポートが必要です" とダイアログに表示されます。
このように If
文の中に別の If
文を使用することで、複数の条件式を使ったより複雑な条件分岐を行うことができます。
※ 今回ダイアログの中で文字列を改行するのに vbNewLine
を使用しています。このように VBA のプログラムの中で改行を行う方法については「VBAで改行する」を参照されてください。
-- --
Excel VBA で If 文の中に別の If 文を記述する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。