VBAには For Next ステートメント や Do Loop ステートメント など、繰り返し処理の方法がいくつかあります。その中でも For Each Next ステートメント は、コレクションや配列を扱う場面で特に力を発揮します。インデックス管理が不要で、対象の要素を順番に処理できるため、コードの可読性と保守性が向上します。
本記事では、VBAでの繰り返し処理に使用する、For Each Nextステートメントの使用方法を詳しく解説します。
基本構文から、コレクション・配列を対象とした記述方法まで、具体例を交えながら紹介していきます。
*For Each NextステートメントはFor Each文とも呼ばれますが、この記事ではFor Eachと表記します。
VBA技術解説
For Each Next ステートメントの構文
コレクション
基本構文
コレクション内の各オブジェクトを、順に変数に格納しながら処理を繰り返します。
※コレクションとは、オブジェクトの集合体のことです。
For_Each _Next 構文
Dim 変数 as Object For 変数 Each In コレクション 処理1 Next [変数]
取り出したオブジェクトを格納する変数は、オブジェクト型で宣言します。また、宣言自体は省略可能です。
なお、[変数] も省略可能です。
セル
範囲指定されたセルに対する、繰り返し処理を例示していきます。
処理サンプルを準備します。
処理実行用サンプル

For_Each_Next 例
Sub セル() Dim r As Range Dim s As String For Each r In Range("A1:A5") s = s & "+" & r.Value Next MsgBox s End Sub
サンプルコードでは、セル範囲:A1〜A5の各セルを、順に変数 r に取り込みます。各セルの値を取り出し、変数 s に ”+” で結合する処理を実行します。
繰り返し回数は、5回となります。
各セルの数値が ”+” で結合され、表示されます。

ワークシート
ワークシートオブジェクトに対する、繰り返し処理を例示していきます。
処理サンプルを準備します。
処理実行用サンプル

For_Each_Next 例
Sub シート() Dim ws As Worksheet Dim s As String For Each ws In ThisWorkbook.Worksheets s = s & "+" & ws.Name Next MsgBox s End Sub
サンプルコードでは、ブックの各シートを、順に変数 ws に取り込みます。各シートのシート名を取り出し、変数 s に ”+” で結合する処理を実行します。
繰り返し回数は、3回となります。
各シートの名称が ”+” で結合され、表示されます。

配列
基本構文
配列内の各要素を、順に変数に格納し、処理を繰り返します。
For_Each _Next 構文
Dim 変数 as Variant For 変数 Each In 配列 処理1 Next [変数]
取り出した要素を格納する変数は、Variant型で宣言します。また、宣言自体は省略可能です。
なお、[変数] も省略可能です。
1次元配列
1次元配列に対する、繰り返し処理を例示していきます。
For_Each_Next 例
Sub 1次元配列() Dim ary(3) As Variant ary(0) = "佐藤" ary(1) = "鈴木" ary(2) = "田中" ary(3) = "中村" Dim a As Variant Dim s As String For Each a In ary s = s & "+" & a Next MsgBox s End Sub
サンプルコードでは、配列の要素を、順に変数 a に取り込みます。各要素の値を取り出し、変数 s に ”+” で結合する処理を実行します。
繰り返し回数は、4回となります。
処理実行結果

2次元配列
2次元配列に対する、繰り返し処理を例示していきます。
For_Each_Next 例
Sub 2次元配列() Dim ary(1, 1) As Variant ary(0, 0) = "佐藤" ary(0, 1) = "鈴木" ary(1, 0) = "田中" ary(1, 1) = "中村" Dim a As Variant Dim s As String For Each a In ary s = s & "+" & a Next MsgBox s End Sub
サンプルコードでは、配列の要素を、順に変数 a に取り込みます。各要素の値を取り出し、変数 s に ”+” で結合する処理を実行します。
繰り返し回数は、4回となります。
処理実行結果

2次元配列の取り出し順序
サンプルコードで見られるように、For Each を使用した2次元配列の要素の取り出し順序には特徴があります。実際には、VBAの内部処理により、行優先順で要素が取り出されます
そこで、意図した順番で取り出したい場合は、For Next を使うと、明示的に行・列の順序を制御できます。
For_(For_Next)_Next 例
Sub 二次元配列() Dim ary(1, 1) As Variant ary(0, 0) = "佐藤" ary(0, 1) = "鈴木" ary(1, 0) = "田中" ary(1, 1) = "中村" Dim i As Long Dim j As Long Dim s As String For i = 0 To UBound(ary, 1) For j = 0 To UBound(ary, 2) s = s & "+" & ary(i, j) Next j Next i MsgBox s End Sub
サンプルコードでは、配列の要素を、任意の順番で取り込みます。各要素の値を取り出し、変数 s に ”+” で結合する処理を実行します。
繰り返し回数は、4回となります。
処理実行結果

その他の繰り返し処理
For Next ステートメント
Do Loop ステートメントは、繰り返し回数が不明な場合に使用しますが、繰り返し回数が明確な場合は、For Next ステートメントが適しています。
For Next を使うことで、指定した回数だけ処理を繰り返すことができ、コードの可読性や管理性も向上します。
下記の記事では、VBAでの繰り返し処理に使用する、For Next ステートメントの基本構文や応用例について詳しく解説しています。ぜひ参考にしてください。
Do Loop ステートメント
For Next ステートメントは、繰り返し回数が明確な場合に使用しますが、繰り返し回数が不明な場合は、Do Loop ステートメントが適しています。
Do Loop を使うことで、条件にあわせて処理を繰り返すことができ、コードの可読性や管理性も向上します。
下記の記事では、VBAでの繰り返し処理に使用する、Do Loop ステートメントの基本構文や応用例について詳しく解説しています。ぜひ参考にしてください。
技術解説まとめに戻る