この記事では、VBAでの繰り返し処理に使用する、For Each Nextステートメントの使用方法を解説します。
基本構文から、コレクション・配列などの記述方法を解説します。
*For Each NextステートメントはFor Each文とも呼ばれますが、この記事ではFor Eachと表記します。
VBA関連解説
For Each Next ステートメントの構文
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回となります。
処理実行結果
注意点等
For Each Nextステートメントの注意点等を確認していきます。
2次元配列の取り出し順序
サンプルコードで見られるように、For Each を使用した2次元配列の要素の取り出し順序には特徴があります。
意図した順番で取り出したい場合は、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 ステートメント
VBAでは、繰り返し回数が判っているときは、For Next ステートメントがよく使われます。
下記の記事では、VBAでの繰り返し処理に使用する、For Next ステートメントの使用方法を解説していますので、参考にしてください。
Do Loop ステートメント
VBAでは、繰り返し回数が不明の時は、Do Loop ステートメントがよく使われます。
下記の記事では、VBAでの繰り返し処理に使用する、Do Loop ステートメントの使用方法を解説していますので、参考にしてください。
概要解説に戻る