【用語集に記載の内容について】

用語集に記載されているメソッドや関数の引数は、VBAエキスパート試験の試験範囲に基づいており、すべての引数を網羅しておりません。 また、書式は公式テキストの記載に準じています。
試験範囲外の引数や詳細については、ヘルプ機能やオブジェクトブラウザーをご参照ください。

【コードをコピーして実行する場合の注意】

文字コードの関係上、半角の「¥」は「/」で表示されるため、当サイトでは全角の「¥」で記載しています。当サイトのコードをコピーして実行する場合は、全角の「¥」を半角の「¥」に変換してください。

For Each…Nextステートメント

名称For Each…Nextステートメント
説明
配列の要素やコレクションのメンバーを1つずつ順番に取り出して、繰り返し処理を行う命令です。

グループのメンバーをすべて取り出し終えると、繰り返しは終了します。
書式
For Each 変数名 In グループ名
 変数を使った処理
Next 変数名

グループ名:配列名やコレクション名、セル範囲を指定

グループには、配列やコレクション、複数のセルを指定できます。

「Next 変数名」の変数名は省略可能です。
For Each…Nextステートメントをネストした場合は、判別のため、変数名を記述することが推奨されます。
コード例①
【グループにWorksheetsコレクションを指定】
Sub Macro1()
    Dim ws As Worksheet

    For Each ws In Worksheets
        MsgBox ws.Name
    Next ws
End Sub

アクティブブックのWorksheetsコレクションの各ワークシートをひとつずつ取り出し、名前をメッセージボックスに表示します。

Worksheetsコレクションとは、ブック内のワークシート(Worksheetオブジェクト)の集合体です。

アクティブブックにワークシート「Sheet1」「Sheet2」が存在する場合、For Each…Nextステートメントは以下のように処理されます。
ws = ワークシート「Sheet1」→ 「Sheet1」のメッセージボックスを表示
ws = ワークシート「Sheet2」→ 「Sheet2」のメッセージボックスを表示
コード例②
【グループに配列を指定】
Sub Macro2()
    Dim arr(1) As String
    Dim item As Variant
    
    arr(0) = "リンゴ"
    arr(1) = "バナナ"

    For Each item In arr
        MsgBox item
    Next
End Sub

配列arrの各要素をひとつずつ取り出し、各要素の値をメッセージボックスに表示します。

For Each…Nextステートメントは以下のように処理されます。
item = arr(0)→ 「リンゴ」のメッセージボックスを表示
item = arr(1)→ 「バナナ」のメッセージボックスを表示
コード例③
【グループにセル範囲を指定】
Sub Macro3()
    Dim cell As Range
    Dim i As Long

    For Each cell In Range("A1:A3")
        i = i + 1
        cell.Value = i
    Next
End Sub

セル範囲A1:A3の各セルをひとつずつ取り出し、各セルに変数iの値を代入します。

For Each…Nextステートメントは以下のように処理されます。
cell = セルA1→ i = 1→ セルA1に1を代入
cell = セルA2→ i = 2→ セルA2に2を代入
cell = セルA3→ i = 3→ セルA3に3を代入
コード例④
【グループにSelectionを指定】
Sub Macro4()
    Dim cell As Range
    Dim i As Long
    
    'セル範囲A1:A3を選択
    Range("A1:A3").Select

    For Each cell In Selection
        i = i + 1
        cell.Value = i
    Next
End Sub

For Each…Nextステートメントのグループに指定されているSelectionは、現在選択されているオブジェクトを表します。
したがって、「Range("A1:A3").Select」で選択したセル範囲A1:A3を表します。

Selectionから各セルをひとつずつ取り出し、各セルに変数iの値を代入します。

For Each…Nextステートメントは以下のように処理されます。
cell = セルA1→ i = 1→ セルA1に1を代入
cell = セルA2→ i = 2→ セルA2に2を代入
cell = セルA3→ i = 3→ セルA3に3を代入
カテゴリスタンダード