VBA For Each文の基本と応用|Excelでの繰り返し処理を徹底解説

ForEachのアイキャッチ VBA

お疲れ様です!

VBAを使用していて、いまいち「For Each文」の意味が分からない。。。
このように悩んでいませんか?

お悩みポイント
悩む人
  • Excelの特定のセル範囲やコレクションに対して、効率よく処理を繰り返したい!
  • ループの回数を意識せずに、データ全体に対して一括操作をしたい!

この記事では、VBAの「For Each文」を使用して、範囲やコレクション内の全要素に対して効率的に繰り返し処理を行う方法を解説します。

「For Each文」は初心者でも直感的に理解でき、配列やセル範囲、オブジェクトのコレクションを扱う際にとても便利です。

使用例はすべてコピペして実行できるので、ぜひ最後までお読みいただき、実践してみてください。


【 この記事の概要 】

  よく使う度    3.5  
  難しさ     3.5  
  覚えておくと安心度     4.0  

この記事を読むとできるようになること

この記事を読むことで、以下のことができるようになります。

この記事を見てできるようになること
回るチンチラ

For Each文とは?

VBAの「For Each文」は、コレクションや配列の各要素に対して繰り返し処理を行うための構文です。
Excelのセル範囲やワークシート、ブック内のオブジェクトなど、複数の要素を1つずつ処理する際に非常に便利です。

「For Each文」を使うことで、各要素に順次アクセスし、個別に処理を行うことができます。

「For文」と異なり、ループの回数やカウンタ変数を意識する必要がないため、直感的かつミスが少ないコードを記述できます。

以下に、VBAで使用できる主要なループ処理を一覧でまとめました。

繰り返し処理の種類

繰り返し処理の種類説明
For文事前に決められた回数だけ繰り返し処理を行います。
固定回数のループに適しており、範囲内で連続した処理を行う際に便利です。
For Each文配列やコレクション内の各要素に対して順次処理を行います。
全要素にアクセスする場合に便利で、シートのセル範囲や
オブジェクトのコレクションに対してよく使用されます。
Do While文指定された条件がTrueの間、処理を繰り返します。
条件に基づいてループを制御したい場合に使用され、
繰り返し回数が不定のケースに適しています。
Do Until文指定された条件がTrueになるまで処理を繰り返します。
Do While文とは逆の条件で動作し、条件が満たされるまで処理を続けます。
While…Wend文指定された条件がTrueである間、処理を繰り返します。
Do While文に似ていますが、よりシンプルなループ処理に使用されます。
Do Loop While文処理を少なくとも1回は実行し、その後、指定された条件がTrueで
あれば繰り返します。
最初に必ず1回処理が行われる点が特徴です。
Do Loop Until文処理を少なくとも1回実行した後、指定された条件がTrue
になるまで繰り返します。
条件が満たされるまで必ず1回は処理が行われます。
引用元:VBA For文の基礎から応用まで|繰り返し処理をマスターする完全ガイド

For Each文の基本構文

For Eachの基本構文
設定解説
  • 要素
    • コレクション内の各要素がこの変数に代入されます。
      たとえば、セル範囲「A1」の各セルを順番に処理する場合、そのセルの値が変数に代入されていきます。
  • コレクション
    • 配列やRange(セル範囲)などのコレクションを指定します。
      配列やセル範囲(Range)、ワークシートの集合体などがコレクションとして扱われます。

この構文を使えば、配列やセル範囲などのすべての要素に対して処理を行うことができます。

セル範囲に対する処理順序

Excelのセル範囲(Range)に対してFor Each文を使った場合、データの処理は「列方向」に進んでいきます
その後、「行方向」に1つセルを下にずらし、再度「列方向」に進みます。

For Each文でセルを繰り返した際の処理手順

つまり、最初に列を基準にセルを処理し、次に行方向へ移動します。
このため、セル範囲の取得順序には注意が必要です。

具体例

以下のコードでは、セル範囲「A1」の各セルに対して、そのセルのアドレスを出力します。

Sub CellProcessingOrder()
    Dim cell As Range
    Dim targetRange As Range
    
    '// セル範囲を指定
    Set targetRange = Range("A1:C3")
    
    '// For Each文を使ってセル範囲内の各セルを処理
    For Each cell In targetRange
        '// セルのアドレスを出力
        Debug.Print cell.Address
    Next cell
    
End Sub

このコードを実行すると、以下の順番でセルのアドレスが出力されます。

For Each文でセルを繰り返した際の処理手順結果

このように、ExcelのRangeオブジェクトをFor Each文で処理する際は、「列方向から行方向」に進むため、処理順序に注意する必要があります。

For Each文を使う際の注意ポイント

  • 1. 配列やセル範囲などのサイズに注意
    • 「For Each文」はすべての要素に対して処理を行うため、処理する範囲が広すぎるとパフォーマンスに影響が出る可能性があります。
      対象範囲が適切なサイズであることを確認しましょう。
  • 2. オブジェクト変数の型に注意
    • 「For Each文」を使う場合、対象となる要素の型を正しく宣言しておくことが重要です。
      特に、セル範囲を操作する場合は「Range」型の変数を使うようにしましょう。

For Each文の使用例

ここからは、「For Each文」の使用例を紹介します。
どれも実際に動作するコードなので、ぜひ実行してみてください。

使用例1: 指定したセルに、文字を繰り返し入力。

特定のセル範囲内のすべてのセルに対して繰り返し処理を行う方法を紹介します。
ここでは、範囲内の各セルに「値」を入力します。

主な使用用途: 特定のセル範囲に対して処理を一括で適用したいときに使用します。

Sub セル範囲の値を処理する()
    Dim cell As Range

    For Each cell In Range("A1:A10")
        cell.Value = "処理済み"
    Next cell

End Sub
動作概要
  • STEP1
    変数「cell」を宣言

    変数「cell」を Range 型で宣言し、セル範囲内の各セルを一時的に保持します。

  • STEP2
    For Eachループを開始

    範囲「A1」内の各セルに対して繰り返し処理を行います。

  • STEP3
    セルに値を入力

    各セルに「処理済み」という文字列を入力します。

  • STEP4
    ループ終了

    すべてのセルに対する処理が完了し、ループが終了します。

処理結果

使用例1の処理結果

このコードで使用している機能

詳細解説

コードの詳細
  1. Sub セル範囲の値を処理する()
    • この行では、「Subステートメント」を使用して新しいプロシージャ(サブルーチン)を定義しています。
      プロシージャ名は「セル範囲の値を処理する」で、このサブルーチンが実行されると、指定された一連の操作が実行されます。
  2. Dim cell As Range
    • ここでは、変数「cell」を Range 型として宣言しています。
      この変数は、後に For Each ループで使用され、セル範囲内の各セルを順番に保持するためのものです。
  3. For Each cell In Range(“A1:A10”)
    • この行では、「For Each」ループが開始されます。
      Range(“A1:A10”) で、セル範囲「A1」を取得し、各セルを変数「cell」に順次代入しながらループ処理を行います。
      「For Each」ループは、範囲内のすべてのセルに対して繰り返し処理を行います。
  4. cell.Value = “処理済み”
    • この行では、現在のセル(cell)の値を「処理済み」に設定しています。
      ループが進むごとに、セル範囲「A1」の各セルにこの値が代入されます。
  5. Next cell
    • この行では、「For Each」ループが次のセルに進むことを示します。
      変数「cell」に次のセルが代入され、再びループ内の処理が実行されます。
      範囲内のすべてのセルに対する処理が終了するまで、このループが繰り返されます。
  6. End Sub
    • この行は、サブルーチン「セル範囲の値を処理する」の終わりを示します。
      すべてのセルに対する処理が完了し、プログラムは次に実行するステップに進みます。

この処理を行うことで、指定したセル範囲に文字列を入力することができます。

使用例2: ワークシートの名前を取得し、セルに出力

現在のエクセルブック内のすべてのシート名を取得し、シート1(最初のシート)のセルに順次出力する方法を紹介します。
複数のシートを持つワークブックで、シート名をリストとしてセルに表示する場合に便利です。

主な使用用途: ワークブック内のすべてのシートの名前をセルに表示したい場合に使用します。

Sub ワークシート名をセルに出力する()
    Dim Ws As Worksheet
    Dim i As Long
    
    i = 1 '// セルの行番号をカウントする変数

    For Each Ws In ThisWorkbook.Sheets
        Sheets(1).Cells(i, 1).Value = Ws.Name
        i = i + 1 '// 次の行に移動
    Next Ws
    
End Sub
動作概要
  • STEP1
    変数「Ws」とi」を宣言

    変数「Ws」はワークシートを保持し、「i」はセルの行番号を示します。

  • STEP2
    i を「1」に初期化する

    最初のワークシート名を「A1」セルに出力するために「i」を「1」に設定します。

  • STEP3
    For Each ループを開始

    ThisWorkbook.Sheets からすべてのワークシートを順次取得し、それを「Ws」に代入してループ処理を行います。

  • STEP4
    ワークシートの名前をセルに出力

    ループごとに、1番目のシートの Cells(i, 1) に Ws.Name(現在のワークシート名)を代入し、出力します。

  • STEP5
    次のセルに進む

    ループごとに「i」を1増やし、次のワークシート名を次のセルに書き込むように設定します。

処理結果

使用例2の処理結果

このコードで使用している機能

詳細解説

コードの詳細
  1. Sub ワークシート名をセルに出力する()
    • ここで新しいサブルーチン(Sub)を定義しています。
      このサブルーチンは、すべてのワークシート名を取得してセルに出力する処理を行います。
  2. Dim Ws As Worksheet
    Dim i As Long
    • 「Ws」という変数を Worksheet 型で宣言しています。
      これは、ワークブック内の各ワークシートを保持するための変数です。

      「i」 は Long 型で宣言されており、シート1のセルの行番号を管理するために使用されます。
  3. i = 1
    • 行番号カウンタ「i」に「1」を代入します。
      これは、最初のワークシート名を出力するセル「A1」に対応しています。
  4. For Each Ws In ThisWorkbook.Sheets
    • For Each ループを使って、現在開いているワークブック(Excelファイル)内のすべてのワークシートを順番に調べます

      ThisWorkbook は、今開いているファイル(ブック)のことを指します。
      .Sheets は、ワークブックに含まれるすべてのシートを意味します。
      For Each ws In ThisWorkbook.Sheets は、「このファイル内にあるすべてのシートを順番に変数「Ws」に入れて、1つずつ処理します」という意味です。
  5. Sheets(1).Cells(i, 1).Value = ws.Name
    • シート1の Cells(i, 1) という指定は、「A列」の「i 行目」を指します。
      「i 」が「1」の場合は「A1」、i が2の場合は「A2」になります。
      この行では、そのセルに現在の 「Ws」(ワークシート)の名前を代入しています。
      つまり、最初のワークシート名が「A1」に入力され、次のワークシート名が「A2」に入力されます。
  6. i = i + 1
    • 「i」の値を「1」増やします。
      これにより、次にワークシート名を出力するセルが「A2」から「A3」へと移動します。
      この処理が繰り返され、シート名が1行ずつ順にセルに入力されていきます。
  7. Next Ws
    • この行で、次のワークシートに進むように指示しています。
      Next Ws によって、もう1つのシートが変数「Ws」に代入され、再びループの処理が行われます。
      すべてのシートを順番に処理し終わるまで、このループは繰り返されます。
  8. End Sub
    • サブルーチンの終わりを示します。
      これで「ワークシート名を取得する」というプログラムがすべて終了します。

このコードは、現在開いているワークブック内のすべてのワークシート名を、シート1の「A列」に順番に出力します。
For Each ループを使って、すべてのワークシートを順に処理し、その名前をシートに書き込む実用的な方法です。
このコードを使えば、ワークブック内のシート名を簡単にリスト化できます。

使用例3: シート内のすべてのシェイプを削除する

現在のワークシートにあるすべてのシェイプ(図形)を選択し、削除する方法を紹介します。
ここでは、For Each文を使用して、すべてのシェイプを削除します。

主な使用用途: シート上の図形やオブジェクトを一括で操作したいときに使用します。

Sub シェイプを削除する()
    Dim shp As Shape

    For Each shp In ActiveSheet.Shapes
        shp.Delete
    Next shp

End Sub
動作概要
  • STEP1
    変数「shp」を宣言

    変数「shp」を Shape 型で宣言し、シート上の各シェイプを一時的に保持します。

  • STEP2
    For Eachループを開始

    アクティブシート内のすべてのシェイプに対して繰り返し処理を行います。

  • STEP3
    シェイプを削除

    各シェイプを Delete メソッドで削除します。

  • STEP4
    ループ終了

    すべてのシェイプが削除され、ループが終了します。

処理結果

     【 処理前 】

使用例3の処理前

     【 処理後 】

使用例3の処理結果

このコードで使用している機能

  • Shapes (図形のオブジェクト)

詳細解説

コードの詳細
  1. Sub シェイプを削除する()
    • この行では、「Subステートメント」を使用して新しいプロシージャ(サブルーチン)を定義しています。
      プロシージャ名は「シェイプを削除する」で、このサブルーチンが実行されると、アクティブなシート上にあるすべてのシェイプを削除する処理が行われます。
  2. Dim shp As Shape
    • ここでは、変数「shp」を Shape 型として宣言しています。
      この変数は、後の For Each ループ内で使用され、シート上に存在する各シェイプ(図形や画像など)を順番に保持するために使われます。
  3. For Each shp In ActiveSheet.Shapes
    • この行では、「For Each」ループが開始されます。
      ActiveSheet.Shapes で、現在アクティブなシート上に存在するすべてのシェイプを取得し、各シェイプを順次変数「shp」に代入しながらループを繰り返します
  4. shp.Delete
    • この行では、現在のシェイプ(shp)を削除する命令が実行されます。
      ループが進むごとに、シート上のすべてのシェイプが削除されます。
  5. Next shp
    • この行では、「For Each」ループが次のシェイプに進むことを示します。
      変数「shp」に次のシェイプが代入され、再びループ内の処理が実行されます。
      シート上のすべてのシェイプに対する処理が終了するまで、このループが繰り返されます。
  6. End Sub
    • この行は、サブルーチン「シェイプを削除する」の終わりを示します。
      すべてのシェイプの削除が完了し、プログラムは次に実行するステップに進みます。

このコードは、アクティブなシート上のすべてのシェイプ(図形、画像など)を順に取得し、削除するシンプルなサブルーチンです。
For Each ループを使用して、各シェイプを順次処理し、削除する動作を実行します。

使用例4: 配列内の要素を、繰り返し計算する

配列内の各要素に対して処理を行う方法を紹介します。
ここでは、配列のすべての要素に「*2」を掛けた値を出力します。

主な使用用途: 配列のデータに対して一括で処理を行いたいときに使用します。

Sub 配列の要素を処理する()
    Dim arr As Variant
    Dim num As Variant

    arr = Array(1, 2, 3, 4, 5)

    For Each num In arr
        Debug.Print num * 2
    Next num

End Sub
動作概要
  • STEP1
    配列を宣言

    配列 arr を宣言し、数値の配列(1, 2, 3, 4, 5)を格納します。

  • STEP2
    For Eachループを開始

    配列 arr の各要素に対して繰り返し処理を行います。

  • STEP3
    値を出力

    各要素に2を掛けた結果を Debug.Print で出力します。

  • STEP4
    ループ終了

    配列内のすべての要素が処理され、ループが終了します。

処理内容

使用例4の処理結果

このコードで使用している機能

  • 配列

詳細解説

コードの詳細
  1. Sub 配列の要素を処理する()
    • Subステートメントを使って、新しいサブルーチン「配列の要素を処理する」を定義しています。
      このサブルーチンは、配列内の各要素に対して処理を実行します。
  2. Dim arr As Variant
    Dim num As Variant
    • ここでは、2つの変数を宣言しています。
      「arr」と「num」のデータ型は「Variant」です。

      「arr」: 配列全体を保持するための変数です。
      配列の中身(複数の値)を一つの変数に格納することができます。

      「num」: 配列内の各要素を順に保持するための変数です。
      For Eachループの中で各要素がこの変数に代入されます。
  3. arr = Array(1, 2, 3, 4, 5)
    • Array関数を使って、数値 1, 2, 3, 4, 5 を持つ配列を作成し、その配列を変数「arr」に代入しています。
      これで、変数「arr」は複数の値(1~5)を保持する「箱」になります。
      配列は、複数のデータを一つにまとめて管理できる便利なデータ構造です。
  4. For Each num In arr
    • For Eachループを使い、配列「arr」内の各要素を順に処理します。

      具体的には、配列内の1番目の要素(1)、2番目の要素(2)、…5番目の要素(5)をnumに代入しながら処理を進めます。
      このループは配列内のすべての要素が処理されるまで繰り返されます。
  5. Debug.Print num * 2
    • ここでは、変数「num」に現在代入されている値(配列の要素)に2を掛け、その結果を出力します。
      出力はVBAのイミディエイトウィンドウに表示されます。
      イミディエイトウィンドウは、デバッグ時に値を確認するためのツールです。
      例えば、1回目のループでは「num」に「1」が代入され、1 * 2 = 2が表示されます。次に2 * 2 = 4が表示される、といった具合に処理されます。
  6. Next num
    • For Eachループを次の要素に進めます。
      配列「arr」のすべての要素が処理されるまでループが続きます。
  7. End Sub
    • サブルーチン「配列の要素を処理する」の終了を示します。
      すべての配列要素に対する処理が完了します。

このサブルーチンは、配列内の数値に対して、それぞれ2を掛けた結果をイミディエイトウィンドウに表示します。
配列の各要素を順番に処理するためにFor Eachループを使用しており、配列の全ての要素が処理された後にループが終了します。

使用例5: ループを条件で指定した条件で止める

セル範囲内で特定の値に達したらループを強制終了する方法を紹介します。
このように、ある条件でストップすることも可能です。

主な使用用途: 条件に応じて、早めにループを終了したい場合に使用します。

Sub ループを途中で止める()
    Dim cell As Range

    For Each cell In Range("A1:A10")
        If cell.Value = "終了" Then
            Exit For
        Else
            cell.Value = "処理中"
        End If
    Next cell

End Sub
動作概要
  • STEP1
    変数「cell」を宣言

    変数「cell」を Range 型で宣言し、セル範囲内の各セルを保持します。

  • STEP2
    For Eachループを開始

    範囲「A1」から「A10」の各セルに対して繰り返し処理を行います。

  • STEP3
    条件をチェック

    セルに「終了」と書かれていた場合、Exit For によりループを終了します。

  • STEP4
    処理の続行

    それ以外の場合はセルに「処理中」と入力します。

  • STEP5
    ループ終了

    範囲「A1」から「A10」のすべてのセルに対して処理が終了すると、ループが完了します。

処理結果

使用例5の処理結果

このコードで使用している機能

詳細解説

コードの詳細
  1. Sub ループを途中で止める()
    • この行では、VBAのSubステートメントを使って新しいサブルーチン「ループを途中で止める」を定義しています。
      このサブルーチンが実行されると、指定された一連の操作が実行されます。
  2. Dim cell As Range
    • 変数「cell」をRange型として宣言しています。
      Range型の変数は、Excelのセルやセル範囲を指し、個々のセルのデータやプロパティにアクセスできます。
      この変数には、後ほどFor Eachループ内で範囲内の各セルが順に代入されます。
  3. For Each cell In Range(“A1:A10”)
    • For Eachループは、範囲内のすべてのセルに対して1つずつ処理を繰り返します
      Range(“A1:A10”)は、セル範囲「A1」から「A10」までを指定しています。
      cell変数に、範囲内の各セル(A1, A2, …, A10)が順に代入され、そのセルに対する処理が行われます。
  4. If cell.Value = “終了” Then
    • If文で、現在のセル(cell)の値が「終了」かどうかを確認しています。
      cell.Valueは、セルの中にある値を参照します。

      もしセルの値が「終了」であれば、Then以下の処理が実行されます。
  5. Exit For
    • 「Exit For」は、現在のFor Eachループを途中で終了させる命令です。
      セルの値が「終了」である場合、ループの残りのセルを無視してループ全体が終了します。
      これにより、「終了」と書かれたセル以降の処理は実行されません。
  6. Else
    • If文の条件が成立しなかった場合、つまりセルの値が「終了」ではない場合に、Else以下の処理が実行されます。
  7. cell.Value = “処理中”
    • Elseの処理として、セルの値を「処理中」に変更します。

      例えば、セル「A1」の値が「終了」でない場合、そのセルに「処理中」と入力されます。
      この処理は、セルの値が「終了」でない限り、ループ内で繰り返されます。
  8. End If
    • If文の終了を示します。
      ここで条件分岐が完了し、次のセルの処理に進みます。
  9. Next cell
    • Nextは、For Eachループの次のセルに進むための命令です。
      次のセル(例えばA2)が変数「cell」に代入され、再度ループ内の処理が実行されます。
      これが範囲内のすべてのセルに対して繰り返されます。
  10. End Sub
    • ここでサブルーチンが終了します。
      すべてのセルの処理が完了し、ループが終了した後、サブルーチンが終了します。
      この行の処理が終わると、プログラムは次のコードに進みます。

このサブルーチンは、セル範囲「A1」に対して順番に処理を行い、各セルの値が「終了」であれば、ループを途中で止めます。
それ以外のセルには「処理中」と書き込みます。

使用例6: 指定した条件だけ、ループ内の処理をスキップする

セルの値が特定の条件に一致した場合、処理をスキップして次のセルに移る方法を紹介します。

主な使用用途: 特定の条件に該当する要素を飛ばしたい場合に使用します。

Sub ループをスキップする()
    Dim cell As Range

    For Each cell In Range("A1:A10")
        If cell.Value = "スキップ" Then
            GoTo Continue
        Else
            cell.Value = "処理済み"
        End If
Continue:
    Next cell

End Sub
動作概要
  • STEP1
    変数「cell」を宣言

    変数「cell」を Range 型で宣言し、セル範囲内の各セルを保持します。

  • STEP2
    For Eachループを開始

    範囲「A1」から「A10」の各セルに対して繰り返し処理を行います。

  • STEP3
    条件に一致した場合、処理をスキップ

    各セルの値が「スキップ」となっている場合、そのセルの処理をスキップし、次のセルに進みます。

  • STEP4
    条件に一致しない場合、セルの値を変更

    それ以外の場合はセルに「処理中」と入力します。

  • STEP5
    ループ終了

    範囲「A1」から「A10」のすべてのセルに対して処理が終了すると、ループが完了します。

処理結果

使用例6の処理結果

このコードで使用している機能

詳細解説

コードの詳細
  1. Sub ループをスキップする()
    • この行で、新しいサブルーチン「ループをスキップする」を定義しています。
      Subステートメントは、VBAにおける一連の処理をまとめたもので、この場合、特定の条件でループ内の処理をスキップする機能を持ちます。
  2. Dim cell As Range
    • 変数「cell」をRange型として宣言しています。
      Range型は、Excelのセルやセル範囲を指し、これによりセルの値やプロパティにアクセスできるようになります。
      この変数「cell」は、後にFor Eachループで範囲内の各セルが順番に代入されます。
  3. For Each cell In Range(“A1:A10”)
    • For Eachループは、指定された範囲「A1」から「A10」内のすべてのセルに対して繰り返し処理を行います。
      変数「cell」に、範囲内のセル(A1からA10まで)が順に代入され、それぞれのセルに対して処理が行われます。
  4. If cell.Value = “スキップ” Then
    • この行では、If文で現在のセル(cell)の値が「スキップ」と等しいかを確認しています。
      もしセルの値が「スキップ」であれば、この条件が成立し、次のThenに続く処理が実行されます。
  5. GoTo Continue
    • GoToステートメントは、コード内の指定された場所にジャンプする命令です。
      この場合、GoTo Continueにより、ラベル「Continue:」の場所にジャンプし、現在のセルの処理をスキップして次のセルに進みます。
  6. Else
    • If文の条件が成立しなかった、つまりセルの値が「スキップ」でない場合に、Elseに続く処理が実行されます。
  7. cell.Value = “処理済み”
    • もしセルの値が「スキップ」でない場合、この行でそのセルに「処理済み」と入力します。

      例えば、セルA1の値が「スキップ」でなければ、A1に「処理済み」と書き込まれます。
  8. Continue:
    • これは「ラベル」と呼ばれるもので、GoToステートメントでジャンプする先を示します。
      もしセルの値が「スキップ」であれば、GoTo Continueによりこの場所にジャンプし、Next cellに進みます。
  9. Next cell
    • この行では、For Eachループが次のセルに進む命令を実行します。
      現在のセルの処理が終わると、次のセル(例えば、A2)がcellに代入され、再びループの処理が行われます。
      これが範囲内のすべてのセルに対して繰り返されます。
  10. End Sub
    • この行はサブルーチン「ループをスキップする」の終了を示します。
      すべてのセルの処理が完了したら、プログラムは次のコードに進みます。

このサブルーチンは、セル範囲「A1」を順に処理し、セルの値が「スキップ」であればそのセルの処理をスキップします。
それ以外のセルには「処理済み」と書き込みます。
GoToステートメントを使うことで、条件に応じたセル処理のスキップが可能です。

まとめ

「For Each文」は、配列やセル範囲、オブジェクトのコレクションに対して繰り返し処理を行う際に非常に便利です。

カウンタ変数を使わずに直感的に処理を行えるため、コードの可読性も向上します。

ポイントのおさらい

  • VBAのFor Each文を使った繰り返し処理を理解する
    • VBAの「For Each文」は、配列やセル範囲、ワークシートのようなコレクションのすべての要素に対して、一括で繰り返し処理を行うための構文です。
      For文と異なり、ループの回数を指定する必要がなく、データ全体に対して順次処理を適用したい場合に便利です。

      For Each文は、データのカウントが不要な分、シンプルで直感的なコードを書くことができます。
      たとえば、セル範囲やワークシートのオブジェクトに対して同じ処理を繰り返す際に利用します。

      「For Each文とは?」もう一度見る。
  • For Each文の動作順序と処理の順番を把握する
  • 繰り返し処理の際の注意点を確認する
  • セルや配列に対する処理を効率化する
    • 配列の各要素やセル範囲、シート上のシェイプなどを一括で処理する「For Each文」の使い方を紹介しました。
      繰り返し処理を活用し、業務の効率を上げましょう。

      「For Each文の使用例」もう一度見る。

この記事の使用例を実践していくことで、VBAのFor Each文を使って、より効率的に繰り返し処理を行えるようになります。
最初はコードをコピペして実行し、少しずつ自分で書けるようにしていきましょう。

タイトルとURLをコピーしました