ous">

小さな在庫管理

在庫管理導入からシステム作成まで詳細解説!

VBA 繰り返し処理 For Each Next ステートメントについて詳細解説! [VBA関連解説#13]

この記事では、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 ステートメントの使用方法を解説していますので、参考にしてください。

 

概要解説に戻る