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 と入力しました。

If文の中にIf文を記述する(1)

先ほどのプログラムを実行します。

If文の中にIf文を記述する(2)

今回は B2 セルの値が 50 よりも大きく、また 70 よりも小さくないので "合格です" とだけダイアログに表示されます。

If文の中にIf文を記述する(3)

次にワークシートの B2 セルの値を 68 に変更し、再度プログラムを実行してみました。今度はセルの値が 50 よりも大きいですが、 70 よりも小さいので表示されるメッセージが追加されて "合格です" "追加レポートが必要です" とダイアログに表示されます。

If文の中にIf文を記述する(4)

このように If 文の中に別の If 文を使用することで、複数の条件式を使ったより複雑な条件分岐を行うことができます。

※ 今回ダイアログの中で文字列を改行するのに vbNewLine を使用しています。このように VBA のプログラムの中で改行を行う方法については「VBAで改行する」を参照されてください。

-- --

Excel VBA で If 文の中に別の If 文を記述する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。