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

配列やコレクションの各要素に対して、一連のステートメントを繰り返し実行するフロー制御ステートメントです。

For Each element In group
   [statements]
   [Exit For]
   [statements]
Next [element]

引数

  • element
    コレクションや配列の各要素を繰り返す変数を指定します。コレクションの場合、element にはバリアント型 (Variant) 変数、総称オブジェクト型変数、または固有オブジェクト型のオートメーション オブジェクトの変数を指定できます。また、配列の場合は、element にはバリアント型のみ指定できます。
  • group
    オブジェクト コレクションまたは配列の名前を指定します。
  • statements
    group の各メンバに対して実行するステートメントを指定します。

解説

group に要素が 1 つでも存在する場合、For Each ブロックが始まります。ループがいったん開始されると、group の最初の要素に対してループ内のすべてのステートメントが実行されます。group の中に要素がある限り、ループ内のステートメントは各要素に対して実行を続けます。group の中に要素がなくなったとき、ループを終了し、Next ステートメントの次のステートメントに実行が移ります。

Exit For ステートメントは、制御構造 For Each...Next ループまたは For...Next ループ内でのみ使用できるステートメントで、ループから抜け出すためのフロー制御ステートメントです。Exit For ステートメントは、For Each...Next ループまたは For...Next ループ内の任意の位置で何回でも使用できます。Exit For ステートメントは、条件の評価 (たとえば If...Then ステートメント) と共に使用されることが多く、Next の直後のステートメントに制御を渡します。

For Each...Next ループは、ネスト (入れ子) 構造にすることができます。つまり、For Each...Next ループの内部に別の For Each...Next ループを入れることができます。ループをネスト (入れ子) 構造にするときは、それぞれの element に別の変数名を指定してください。

メモ   Next ステートメントの element を省略すると、element が指定されている場合と同様に実行を継続します。Next ステートメントを対応する For ステートメントよりも前に記述すると、エラーが発生します。

次のコードは、For Each...Next ステートメントの使用例です。

Function ShowFolderList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   For Each f1 in fc
      s = s & f1.name 
      s = s & "<BR>"
   Next
   ShowFolderList = s
End Function

必要条件

バージョン 2

参照

Do...Loop ステートメント | Exit ステートメント | For...Next ステートメント | While...Wend ステートメント