方法 : コレクションまたは配列で、各要素の複数のステートメントを実行する

更新 : 2007 年 11 月

For Each ステートメント構造は、For...Next ループに似ていますが、指定した回数だけステートメント ブロックを実行するのではなく、コレクションの各要素に対してステートメント ブロックを実行します。For Each...Next ループでは、ループの各繰り返しのときに、コレクションの異なる要素を表す要素変数が使用されます。

コレクションのステートメント ブロックの繰り返し

コレクションの各要素に対して、一連のステートメントを実行するには

  1. ステートメント ブロックを実行するコレクションを識別し、For Each...Next ステートメント (Visual Basic) を使用して、要素変数とコレクションの両方を指定します。

    For Each thisControl As System.Windows.Forms.Control In thisForm.Controls
    

    要素変数がループの外側で宣言されていない場合は、As 句を使用して、For Each ステートメントの一部として要素変数を宣言できます。

    Visual Basic では、それぞれの反復処理に対して、コレクションの異なる要素が自動的に置換されます。

  2. 繰り返される最後のステートメントの後で Next ステートメントを使用して、For Each...Next 構造を完成します。Next ステートメントで要素変数を指定することもできます。

    Sub lightBlueBackground(ByVal thisForm As System.Windows.Forms.Form)
        For Each thisControl As System.Windows.Forms.Control In thisForm.Controls
            thisControl.BackColor = System.Drawing.Color.LightBlue
        Next thisControl 
    End Sub
    

    コレクションの要素を見ることはできますが、コレクション自体に、要素の追加、削除、または置き換えなどの変更を加えることはできません。しかし、要素が参照型である場合、アクセスしてメンバを設定できます。各 Control 要素が参照型であるため、上の例のコードの BackColor プロパティを変更できます。

配列のステートメント ブロックの繰り返し

For Each...Next ループを使用して、配列を反復処理することもできます。ただし、コレクションと同様に、配列要素を見るだけで変更はできません。

配列の各要素に対して、一連のステートメントを実行するには

  1. For Each ステートメントを使用して、要素変数および配列の両方を指定します。配列名の後にかっこを指定しないでください。

    Visual Basic では、配列がコレクションと同様に扱われます。

  2. ステートメント ブロックの後に、Next ステートメントを指定します。Next ステートメントで要素変数を指定することもできます。

    次に示すのは、配列の要素の合計を求め、各要素をゼロにリセットするプロシージャの例です。

    Function sumAndReset(ByRef numbers() As Integer) As Integer
        Dim sum As Integer = 0
        For Each elt As Integer In numbers 
            sum += elt
            ' The following statement works only on the local copy
            ' of the array, not on the original array.
            elt = 0
        Next elt
        Return sum
    End Function
    

    合計の計算は、要素の読み取りだけを使用して行われるため、正常に機能します。しかし、ゼロへのリセットは機能しません。各要素のローカル コピーだけがゼロにリセットされ、元の要素は元の配列で変更されないまま残るためです。

参照

処理手順

方法 : 制御構造から制御を移す

方法 : 複数のステートメントを繰り返し実行する

方法 : ループのパフォーマンスを改善する

方法 : ループの次の反復処理にスキップする

概念

条件判断構造

ループ構造

その他の制御構造

入れ子になった制御構造

参照

For...Next ステートメント (Visual Basic)

その他の技術情報

Visual Basic における制御フロー