§1 Ifステートメント

§1.1 Ifステートメントの構文

Ifステートメントは条件式で記述された条件が成り立っているかどうかを判断し、実行する処理を分岐させるための構文です。 Ifステートメントの構文の形式は次の通りです。 [ ]でくくった部分は省略することが可能な箇所です。

条件が成り立っているときに実行するステートメントが0行以上の時の構文
If 条件式 Then

  [条件式が成り立っているときに実行するステートメント]

End If
条件に応じて実行するステートメントが0行以上の時の構文
If 条件式 Then

  [条件式が成り立っている時に実行するステートメント]

Else

  [条件式が成り立っていない時に実行するステートメント]

End If
条件とそれに応じて実行するステートメントが2組以上ある時の構文
If 条件式1 Then

  [条件式1が成り立っている時に実行するステートメント]

ElseIf 条件式2 Then

  [条件式2が成り立っている時に実行するステートメント]

ElseIf 条件式3 Then

  [条件式3が成り立っている時に実行するステートメント]
    :
    :
[Else

  どの条件式にも当てはまらない時に実行するステートメント]

End If

このようにIf ... ThenEnd Ifの間の部分に条件式が成り立っている場合に実行するステートメントを記述します。 ElseIf ... Thenは最初のIf、またはひとつ前のElseIfの条件式が成り立っていない場合に判定する条件文および実行するステートメントを記述するためのものです。 Elseは他のどの条件文も成り立っていない場合に実行するステートメントを記述するためのものです。

If ... ThenおよびIf ... Then ... Elseは、次のように条件式と実行するステートメントを1行で記述することもできます。 この場合、End Ifは不要です。

条件が成り立っているときに実行するステートメントが1行の時の構文
If 条件式 Then [条件式が成り立っているときに実行するステートメント]
条件に応じて実行するステートメントが1行の時の構文
If 条件式 Then 条件式が成り立っている時に実行するステートメント [Else 条件式が成り立っていない時に実行するステートメント]

§1.2 Ifステートメントの例

以下の例はIfステートメントを使って、変数に格納されている値によって実行する処理を変える例です。

Ifステートメントの例
Dim i As Integer = 3

' 1行形式のIfステートメントの例
If i = 3 Then Console.WriteLine("i は 3 です。")

' 条件式が成り立っている場合とそうでない場合のそれぞれで実行する処理を分ける例
If i = 5 Then

  ' 条件式が成り立っている(iが5の場合)に実行する処理
  Console.WriteLine("i は 5 です。")

Else

  ' 条件式が成り立っていない(iが5ではない場合)に実行する処理
  Console.WriteLine("i は 5 ではありません。")

End If

' 複数の条件と対応する処理を分ける例
If i = 5 Then

  ' Ifの条件式(i = 5)が成り立っている場合に実行する処理
  Console.WriteLine("i は 5 です。")

' 最初のIfの条件式が成り立っていない場合に判定する条件式
ElseIf i = 2 Then

  ' ElseIfの条件式(i = 2)が成り立っている場合に実行する処理
  Console.WriteLine("i は 2 です。")

Else

  ' どの条件式も成り立っていない場合に実行する処理
  Console.WriteLine("i は 5 でも 2 でもありません。")

End If
実行結果
i は 3 です。
i は 5 ではありません。
i は 5 でも 2 でもありません。

§1.3 条件式と演算子

条件式で数値の比較を行うには、=, <>, <=などの比較演算子を使います。

Dim i As Integer = 2

If i = 3 Then Console.WriteLine("i は 3 です。")
If i < 5 Then Console.WriteLine("i は 5未満 です。")
If i <> 9 Then Console.WriteLine("i は 9 ではありません。")

文字列の比較にも=<>などの演算子が使える他、Stringクラスの検索・比較メソッドを使うこともできます。

Dim s As String = "あいうえお"

If s = "abc" Then Console.WriteLine("s は 'abc' です。")
If s.StartsWith("ABC") Then Console.WriteLine("s は 'ABC' で始まる文字列です。")
If s.Contains("あ") Then Console.WriteLine("s には 'あ' が含まれています。")

オブジェクト同士やヌル参照の比較を行う場合にはIsやTypeOfなどを使って条件式を記述します。

Dim s As String = "ABC"

If s Is Nothing Then Console.WriteLine("s はヌル参照です。")
If TypeOf s Is String Then Console.WriteLine("s は文字列型です。")
If TypeOf s Is String() Then Console.WriteLine("s は文字列型の配列です。")

各演算子やメソッドの詳細については各ページを参照してください。

§1.4 条件式の結合

条件式を結合するにはAndAlso演算子およびOrElse演算子を用います。 条件「XかつY」はX AndAlso Y、「XまたはY」はX OrElse Yと記述します。 また、条件の否定にはNot演算子を用います。 条件「Xではない」はNot Xと記述します。

条件式の結合・否定の例
Dim i As Integer = 3

If 2 <= i AndAlso i < 5 Then

  Console.WriteLine("i は 2以上 かつ 5未満の数値です。")

End If

If i < 5 OrElse 10 <= i Then

  Console.WriteLine("i は 5未満 または 10以上の数値です。")

End If

If Not i = 5 Then ' i <> 5 と同じ

  Console.WriteLine("i は 5 以外の数値です。")

End If
実行結果
i は 2以上 かつ 5未満の数値です。
i は 5未満 または 10以上の数値です。
i は 5 以外の数値です。

なお、AndAlso演算子・OrElse演算子はショートサーキットによる評価を行います。

論理演算子の詳細については論理演算子を参照してください。



§1.5 複数の条件式

IfステートメントではElseIfにより条件式を複数記述することができます。

Ifステートメントと複数の条件式による場合分け
Dim i As Integer = 3

If i = 1 Then

  ' iが1の場合

ElseIf i = 2 OrElse i = 3 Then

  ' iが2または3の場合

ElseIf i = 4 Then

  ' iが4の場合

Else

  ' それ以外の場合

End If

一方、上記の例のように多数の条件で場合分けをする場合はSelectステートメントを使うこともできます。

Selectステートメントを使った場合分け
Dim i As Integer = 3

Select i
  Case 1

    ' iが1の場合

  Case 2, 3

    ' iが2または3の場合

  Case 4

    ' iが4の場合

  Case Else

    ' それ以外の場合

End Select

SelectステートメントについてはSelect Caseステートメントを参照してください。

§1.6 入れ子

Ifステートメントの中にIfステートメントを記述する、つまりIfステートメントを入れ子にすることにより、ある条件が成り立っている場合にさらに追加の条件で分岐を行うようにすることもできます。

入れ子にしたIfステートメントの例
Dim i As Integer = 3

' 最初の条件式
If i <> 5 Then

  Console.WriteLine("i は 5 ではありません。")

  ' 入れ子にしたIfステートメントで、さらに条件分岐を行う
  If i <= 2 Then

    Console.WriteLine("i は 2 以下です。")

  Else

    Console.WriteLine("i は 2 より大きいです。")

  End If

End If
実行結果
i は 5 ではありません。
i は 2 より大きいです。

入れ子のIfステートメントは複数の条件をAND結合したものと同じなので、AndAlso演算子を使って1つのIfステートメントで記述することができます。 例えば、次の二つのIfステートメントはどちらも同じ動作となります。

入れ子にしたIfステートメントとAndAlso演算子を使ったIfステートメントの比較
Dim i As Integer = 3

' 入れ子にしたIfステートメント
If 2 <= i Then

  If i < 5 Then

    Console.WriteLine("i は 2以上 かつ 5未満の数値です。")

  End If

End If

' 先のIfステートメントと同じ動作をする条件式のIfステートメント
If 2 <= i AndAlso i < 5 Then

    Console.WriteLine("i は 2以上 かつ 5未満の数値です。")

End If

§2 If演算子

VB.NET 2008(Visual Studio 2008)からはCやC#の三項演算子~?~:~と同様の機能を持つIf演算子がサポートされるようになりました。 この演算子を使うことにより、条件分岐と値の代入を1行で行うことができるようになります。

IfステートメントとIf演算子の例
Dim num As Integer = 3
Dim oddeven As String

' 数が奇数か偶数か判別して文字列に代入する
If num Mod 2 = 0 Then

  oddeven = "偶数"

Else

  oddeven = "奇数"

End If

Console.WriteLine("{0} は {1} です", num, oddeven)

' Ifステートメントを使って数が奇数か偶数か判別した結果を文字列に代入する
' (上記のIfステートメントと同等のコード)
oddeven = If(num Mod 2 = 0, "偶数", "奇数")

Console.WriteLine("{0} は {1} です。", num, oddeven)
実行結果
3 は 奇数 です。
3 は 奇数 です。

If演算子について詳しくは論理演算子 §.If演算子で解説しています。

§3 #Ifディレクティブ

VB.NETには条件付きのコンパイルを行うための#Ifディレクティブというものがあります。 Ifステートメントと似ていますが、機能はまったく異なります。 Ifステートメントは実行時の条件分岐を行うためのものですが、#Ifディレクティブはコンパイル時の条件分岐を行うためのものです。 次の例は、#Ifディレクティブを使った例です。

#Ifディレクティブの例
#If DEBUG Then

Console.WriteLine("このメッセージはDebug構成の場合にのみ表示されます。")

#Else

Console.WriteLine("このメッセージはDebug構成以外(Release構成)の場合にのみ表示されます。")

#End If

#Ifディレクティブについて詳しくは条件付きの呼び出しを参照してください。