ステートメント

注意:
この文書は以前「.NETでいきまっしょい!」で公開していたものですが、公開以降メンテナンスされていません。 今や古い情報となった内容が記載されている場合があるのでご注意ください。

Ifステートメント

 Ifステートメントはある条件が成り立っているか判断してプログラムの流れを変えるために使用する構文です。 構文の形式は次の通りです。
・条件が成り立っているときに実行するステートメントが一行の時

If 条件式 Then ステートメント

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

If 条件式 Then
	[ステートメント]
End If

・条件が成り立っているときと成り立っていないときに実行するステートメントがある時

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

・条件が一つ以上ある時

If 条件式1 Then
	[条件式1が成り立っている時に実行するステートメント]
ElseIf 条件式2 Then
	[条件式2が成り立っている時に実行するステートメント]
.
.
[Else]
	[どの条件式にも当てはまらない時に実行するステートメント]
End If
 この構文のうち[]でくくった部分は省略可能な部分です。
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
Dim i As Integer = 3


If i = 3 Then Console.WriteLine("i は 3 です。")


If i = 5 Then
    Console.WriteLine("i は 5 です。")
Else
    Console.WriteLine("i は 5 ではありません。")
End If


If i = 5 Then
    Console.WriteLine("i は 5 です。")
ElseIf i = 2 Then
    Console.WriteLine("i は 2 です。")
Else
    Console.WriteLine("i は 5 でも 2 でもありません。")
End If
出力結果
i は 3 です。
i は 5 ではありません。
i は 5 でも 2 でもありません。
 また、Ifステートメントの中でさらにIfステートメントを使用することもできます。
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
Dim i As Integer = 3

If i <> 5 Then

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

    If i <= 2 Then

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

    Else

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

    End If

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

Select Caseステートメント

 Select Caseステートメントは、ある値に対してその分類を行い、その分類毎に実行するプログラムを変えるための構文です。 構文の形式は次の通りです。
Select [ Case ] 分類する元の値を保持する変数
   [ Case 
      [ ステートメント ] ]
   [ Case Else
      [ ステートメント ] ]
End Select
 Case Elseの部分は、どの分類にも当てはまらなかった場合に実行されます。 次のコードは、1 から 10 までの数値について、(奇数ではなく)素数か偶数かに分類するものです。 Forステートメントについてはこの次の項目を参照してください。
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
Dim i As Integer

For i = 1 To 10

    Select Case i

        Case 2, 3, 5, 7
            Console.WriteLine("{0} は素数です。", i)

        Case 2, 4, 6, 8, 10
            Console.WriteLine("{0} は偶数です。", i)

        Case Else
            Console.WriteLine("{0} は偶数でも素数でもありません。", i)

    End Select

Next
出力結果
1 は偶数でも素数でもありません。
2 は素数です。
3 は素数です。
4 は偶数です。
5 は素数です。
6 は偶数です。
7 は素数です。
8 は偶数です。
9 は偶数でも素数でもありません。
10 は偶数です。
 この実行結果から分かるとおり、偶数でも素数でもある2はただ単に素数であるとだけ表示されますが、これは最初の分類に引っかかった後はほかの分類に引っかからないからです。

For〜Nextステートメント

 Forステートメントは繰り返す回数が決まっている場合に使用します。 Forステートメントでは今何回繰り返したかを覚えておくためのカウンタ変数が必要になります。 構文の形式は次の通りです。
For カウンタ変数 = 初期値 To 終了値 [Step 増分]
	[ステートメント]
Next [カウンタ変数]
 Forステートメントでは、まずカウンタ変数を初期値に指定し、増分で指定した分ずつカウンタ変数の値を増やしていきます。 その度にForからNextの間に記述されているすべてのステートメントを実行します。 カウンタ変数が終了値に達するか越えた場合、繰り返しが終了します。 このとき増分を省略すると増分は1とされます。
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
Dim i As Integer ' カウンタ変数

' 0 から 9 まで 1 ずつ
For i = 0 To 9
    Console.Write(i)
Next i

Console.WriteLine()

' 9 から 0 まで -1 ずつ
For i = 9 To 0 Step -1
    Console.Write(i)
Next

Console.WriteLine()

' 0 から 9 まで 2 ずつ
For i = 0 To 9 Step 2
    Console.Write(i)
Next

Console.WriteLine()
出力結果
0123456789
9876543210
02468
 ForステートメントではForステートメントの中にさらにForステートメントを含めることもできます。 この場合、内側のForステートメントから順に繰り返されていきます。
001
002
003
004
005
006
007
008
009
Dim i, j As Integer ' カウンタ変数

' i が 0 から 2 まで 1 ずつ
For i = 0 To 2
    ' j が 0 から 2 まで 1 ずつ
    For j = 0 To 2
        Console.WriteLine("{0}, {1}", i, j)
    Next
Next
出力結果
0, 0
0, 1
0, 2
1, 0
1, 1
1, 2
2, 0
2, 1
2, 2
 VB.NET 2003 (Visual Studio .NET 2003)からは、次の例のようにForステートメントで使用できるカウンタ変数をForステートメント内で宣言できるようになりました。
001
002
003
004
' 0 から 9 まで 1 ずつ
For i As Integer = 0 To 9
    Console.Write(i)
Next
 このようにして宣言したカウンタ変数は、Forステートメント内のみで有効であることに注意してください。 Forステートメントの外から参照することはできません。

For〜Each〜Nextステートメント

 For-Eachステートメントは特定の要素の集まり(コレクション)に対して、そのすべての要素を一つずつ抜き出して繰り返す場合に使用します。 For-Eachステートメントでは抜き出した要素を扱うための変数を用意しておく必要があり、その変数の型は当然要素を格納できる型である必要があります。 構文の形式は次の通りです。
For Each 要素変数 In コレクション
	[ステートメント]
Next [要素変数]
 基本的にForステートメントと同じなので問題ないと思います。 次のコードは配列に含まれるすべての要素を抜き出して表示するコードです。
001
002
003
004
005
006
007
008
009
010
011
012
' 二次元配列
Dim arr(,) As Integer = {{0, 1, 2}, {3, 4, 5}}

' 抜き出した要素を格納するための変数
Dim i As Integer

' すべての要素について繰り返す
For Each i In arr

    Console.WriteLine(i)

Next
出力結果
0
1
2
3
4
5
 Forステートメント同様、For-EachステートメントでもVB.NET 2003 (Visual Studio .NET 2003)からは、ステートメント内で使用できるカウンタ変数をステートメント部で宣言できるようになりました。
001
002
003
004
005
006
007
008
009
' 二次元配列
Dim arr(,) As Integer = {{0, 1, 2}, {3, 4, 5}}

' すべての要素について繰り返す
For Each i As Integer In arr

    Console.WriteLine(i)

Next

While〜While Endステートメント

 Whileステートメントは繰り返す回数は決まっていないが、繰り返しを続ける(または、やめる)条件がわかっている場合に使用します。 構文の形式は次の通りです。 ちなみにVB.NETでは他のブロック構造との整合性を保つためにWendはサポートされず、While Endを使わなければなりません。
While 条件式
	[ステートメント]
End While
 この条件式が成り立っている限り(式が真である限り)繰り返されます。 条件が常に成り立ってしまうようにコーディングすると無限ループしてしまうので注意が必要です(意図的に無限ループにすることもありますが、その場合でも必ずループを中止するためのコードを記述します)。
001
002
003
004
005
006
007
008
009
010
011
Dim i As Integer = 0

' i が 10 未満の間はループを繰り返す
While i < 5

    Console.WriteLine(i)

    ' i を 1 増やす
    i += 1

End While
出力結果
0
1
2
3
4

Do〜Loopステートメント

 Do-LoopステートメントはWhileステートメントと似ていますが、Whileとは異なり様々なバリエーションの条件を付けることができます。 その構文を次に示します。
先に条件をチェックし、条件が成り立っている間ループを続ける構文
Do While 条件式
    [ステートメント]
Loop

・ステートメントを実行した後で条件をチェックし、条件が成り立っている間ループを続ける構文
Do
    [ステートメント]
Loop While 条件式先に条件をチェックし、条件が成り立つまでループを続ける構文
Do Until 条件式
    [ステートメント]
Loop

・ステートメントを実行した後で条件をチェックし、条件が成り立つまでループを続ける構文
Do
    [ステートメント]
Loop Until 条件式無限にループを繰り返し、ステートメントを実行する構文
Do
    [ステートメント]
Loop
 一番最後の構文を使用する場合は、何らかの条件が整った時点でExit Do (後述)を用いてループから抜ける必要があります。
001
002
003
004
005
006
007
008
009
010
Dim i As Integer = 0

' i が 5 になるまではループを繰り返す
Do

    Console.WriteLine(i)

    i += 1

Loop Until i = 5
出力結果
0
1
2
3
4

ループステートメントの中断

 ForやWhileなどのステートメントでは、ループの途中でループから抜けることができます。 その場合にはExitを使います。 ForループではExit For、WhileループではExit Whileのように使います。
Forループで使用した例
001
002
003
004
005
006
007
008
009
010
Dim i As Integer

For i = 0 To 9

    Console.WriteLine(i)

    ' i が 5 になったらループを中止
    If i = 5 Then Exit For

Next
出力結果
0
1
2
3
4
Doループで使用した例
001
002
003
004
005
006
007
008
009
010
011
012
013
Dim i As Integer = 0

' 無限ループ
Do

    i += 1

    Console.WriteLine(i)

    ' i が 3 になったらループから抜ける
    If i = 3 Then Exit Do

Loop
出力結果
1
2
3