If...Then...Else ステートメント (Visual Basic)

式の値に応じてステートメント グループを条件付きで実行します。


' Multiline syntax:
If condition [ Then ]
    [ statements ]
[ ElseIf elseifcondition [ Then ]
    [ elseifstatements ] ]
[ Else
    [ elsestatements ] ]
End If

' Single-line syntax:
If condition Then [ statements ] [ Else [ elsestatements ] ]

この記事には、If...Then...Else ステートメントの使用方法を示す例がいくつか含まれています。


必須です。 式。 True または False、または Boolean に暗黙的に変換できるデータ型に評価される必要があります。

式が Nothing に評価される NullableBoolean 変数の場合、条件は、式が False であるかのように処理され、ElseIf ブロックが存在する場合は評価されます。存在しない場合は、Else ブロックが実行されます (存在する場合)。


任意。 conditionTrue に評価された場合に実行される If...Then の後に続く 1 つ以上のステートメント。

ElseIf が存在する場合は必須です。 式。 True または False、または Boolean に暗黙的に変換できるデータ型に評価される必要があります。

任意。 elseifconditionTrue に評価された場合に実行される ElseIf...Then の後に続く 1 つ以上のステートメント。

任意。 前の condition または elseifcondition 式が True に評価されなかった場合に実行される 1 つ以上のステートメント。

End If
複数行バージョンの If...Then...Else ブロックを終了します。



If...Then...Else ステートメントが検出されると、condition がテストされます。 conditionTrue の場合、Then に続くステートメントが実行されます。 conditionFalse の場合は、各 ElseIf ステートメント (存在する場合) が順番に評価されます。 True になる elseifcondition が見つかると、関連付けられた ElseIf の直後にあるステートメントが実行されます。 True に評価される elseifcondition がない場合、または ElseIf ステートメントが存在しない場合は、Else に続くステートメントが実行されます。 ThenElseIf、または Else の後に続くステートメントが実行されると、End If に続くステートメントが引き続き実行されます。

ElseIfElse の句は省略可能です。 If...Then...Else ステートメントには、必要な数の ElseIf 句を指定できますが、Else 句の後に ElseIf 句を指定することはできません。 If...Then...Else ステートメントは、入れ子にすることができます。

複数行の構文では、If ステートメントが 1 行目の唯一のステートメントである必要があります。 ElseIfElse、および End If ステートメントの前には、行ラベルのみを付けることができます。 If...Then...Else ブロックは、End If ステートメントで終了する必要があります。


Select...Case ステートメントは、複数の値が結果として得られる可能性がある単一の式を評価する場合に便利です。


単一行の構文は、単一の条件の場合に使用することができ、True の場合に実行するコードを指定します。 ただし、複数行の構文では、より多くの構造と柔軟性が提供され、読み取り、保守、デバッグが簡単になります。

ステートメントが単一行の If であるかどうかを判別するために、Then キーワードの後に続くものが検査されます。 同じ行の Then の後にコメント以外のものがある場合、そのステートメントは単一行の If ステートメントとして扱われます。 Then がない場合は、複数行の If...Then...Else が開始されたと見なされます。

単一行の構文では、If...Then の判断の結果として複数のステートメントを実行できます。 すべてのステートメントは、同じ行にあり、コロンで区切られている必要があります。


次の例では、If...Then...Else ステートメントの複数行構文の使用方法を示します。

Module Multiline
    Public Sub Main()
        'Create a Random object to seed our starting value 
        Dim randomizer As New Random()
        'set our variable
        Dim count As Integer = randomizer.Next(0, 5)

        Dim message As String

        'If count is zero, output will be no items
        If count = 0 Then
            message = "There are no items."
        'If count is 1, output will be "There is 1 item.".        
        ElseIf count = 1 Then
            message = "There is 1 item."
        'If count is greater than 1, output will be "There are {count} items.", where {count} is replaced by the value of count. 
            message = $"There are {count} items."
        End If

    End Sub
End Module
'This example displays output like the following:
' There are 4 items.


次の例には、入れ子になった If...Then...Else ステートメントが含まれています。

Module Nested
    Public Sub Main() 
        ' Run the function as part of the WriteLine output.
        Console.WriteLine("Time Check is " & CheckIfTime() & ".")     
    End Sub

    Private Function CheckIfTime() As Boolean
        ' Determine the current day of week and hour of day.
        Dim dayW As DayOfWeek = DateTime.Now.DayOfWeek
        Dim hour As Integer = DateTime.Now.Hour

        ' Return True if Wednesday from 2 to 3:59 P.M.,
        ' or if Thursday from noon to 12:59 P.M.
        If dayW = DayOfWeek.Wednesday Then
            If hour = 14 Or hour = 15 Then
                Return True
                Return False
            End If
        ElseIf dayW = DayOfWeek.Thursday Then
            If hour = 12 Then
                Return True
                Return False
            End If
            Return False
        End If
    End Function
End Module
'This example displays output like the following:
'Time Check is False.



Module SingleLine
    Public Sub Main()

        'Create a Random object to seed our starting values 
        Dim randomizer As New Random()

        Dim A As Integer = randomizer.Next(10, 20)
        Dim B As Integer = randomizer.Next(0, 20)
        Dim C As Integer = randomizer.Next(0, 5)

        'Let's display the initial values for comparison
        Console.WriteLine($"A value before If: {A}")
        Console.WriteLine($"B value before If: {B}")
        Console.WriteLine($"C value before If: {C}")

        ' If A > 10, execute the three colon-separated statements in the order
        ' that they appear
        If A > 10 Then A = A + 1 : B = B + A : C = C + B

        'If the condition is true, the values will be different
        Console.WriteLine($"A value after If: {A}")
        Console.WriteLine($"B value after If: {B}")
        Console.WriteLine($"C value after If: {C}")

    End Sub
End Module
'This example displays output like the following:
'A value before If: 11
'B value before If: 6
'C value before If: 3
'A value after If: 12
'B value after If: 18
'C value after If: 21