if文の中にif文を記述する

広告

もう一度if文の基本的な構文を見てみます。

If 条件式1 Then
    (条件式1がTrueの時に行う処理1)
    (条件式1がTrueの時に行う処理2)
Else
    (条件式1がFalseの時に行う処理1)
    (条件式1がFalseの時に行う処理2)
End If

条件が「True」の場合や「False」の場合に行いたい処理は特別なものではありませんのでどのような処理でも記述ができます。その為、条件式が「True」や「False」の場合に行われる処理のところに別のif文を記述することも可能です。

If 条件式1 Then
    (条件式1がTrueの時に行う処理1)

    If 条件式2 Then
        (条件式2がTrueの時に行う処理1)
        (条件式2がTrueの時に行う処理2)
    Else
        (条件式2がFalseの時に行う処理1)
        (条件式2がFalseの時に行う処理2)
    End If

    (条件式1がTrueの時に行う処理2)
Else
    (条件式1がFalseの時に行う処理1)
    (条件式1がFalseの時に行う処理2)
End If

この場合は特に特別な構文と言うわけではなく、行われる処理の中に、処理の1つとして別のif文を記述しただけです。ですので、どれだけ階層を深くして記述しても構いません。

If 条件式1 Then
    (条件式1がTrueの時に行う処理1)

    If 条件式2 Then
        (条件式2がTrueの時に行う処理1)

        If 条件式3 Then
            (条件式3がTrueの時に行う処理1)
        Else
            (条件式3がFalseの時に行う処理1)
        End If

        (条件式2がTrueの時に行う処理2)
    Else
        (条件式2がFalseの時に行う処理1)
        (条件式2がFalseの時に行う処理2)
    End If

    (条件式1がTrueの時に行う処理2)
Else
    (条件式1がFalseの時に行う処理1)
    (条件式1がFalseの時に行う処理2)
End If

サンプルプログラム

では簡単なサンプルで試してみましょう。

testif4.bas

Sub テスト()
    Dim x As Integer
    
    x = 9
    
    If x > 0 Then
        Dim amari As Integer
        
        amari = x Mod 2
        
        If amari = 0 Then
            Range("A1").Value = "値は正の偶数です"
        Else
            Range("A1").Value = "値は正の奇数です"
        End If
    Else
        Range("A1").Value = "値は負の数です"
    End If

End Sub

上記のマクロを実行すると次のようになります。

条件分岐の中に別の条件分岐

今回はまず正の整数か負の整数かを判別してから、正の整数だった場合にはさらに偶数か奇数かを判別しています。

また今回のサンプルでは奇数か偶数かを判別するために、2で割った余りをまず求めてから条件分岐を記述していますが、次のようにまとめて記述する事も可能です。

Sub テスト()
    Dim x As Integer
    
    x = 9
    
    If x > 0 Then
        If x Mod 2 = 0 Then
            Range("A1").Value = "値は正の偶数です"
        Else
            Range("A1").Value = "値は正の奇数です"
        End If
    Else
        Range("A1").Value = "値は負の数です"
    End If

End Sub

この場合は、内側の条件式にて、まず「x Mod 2」という計算式が実行され、その結果得られた値と「0」が等しいかどうかを判別されています。このようにまとめて記述することでコードの量を減らすことが可能です。(ただ分かりにくい場合には、最初の例のように一度割り算の余りを一度変数に格納しておいてから、改めて他の値と比較するいうように記述しても構いません。慣れてくるとまとめて記述するようになります)。

( Written by Tatsuo Ikura )