For Each~Nextステートメント

For Each~Nextステートメントはグループのメンバーを一つずつ取り出して処理を繰り返します。
初心者の方は、何を言ってるのか分からないと思います。
このテクニックは、オブジェクト(ワークシートやセル、ワークブックなど)の操作でよく使用されます。

エクセルVBAでは、ワークシートやセル、ワークブックを一つのコレクションとして扱います。
コレクションとは集合体・グループの事です。

ワークシートを例に説明します。

4つのシート「営業計画」「営業実績」「販促費」「機械費」 これらがWorksheetsコレクションです。
シート「営業実績」はワークシートオブジェクトのコレクションの一つです。

上図でシートを追加してシート名を「機械費」とするとエラーになります。
それは、すでにシート「機械費」が存在するため同じ名前を付ける事が出来ないからです。
それはVBAで行っても同様にエラーが発生します。
手操作の場合「機械費の名前が使われているかな~」と左から右に全てのシートを見て確認を行います。
VBAでも「機械費」の名前が存在するかは全てのシートを確認する必要があります。
このような時にFor Each~Nextステートメントを使用します。

Sub シートの確認()
  Dim WS As Worksheet
  Dim FLAG As Boolean

  For Each WS In Worksheets
    If WS.Name = “機械費” Then
      FLAG = True
    End If
  Next

  If FLAG = True Then
    MsgBox “シート名「機械費」は既に存在します”
  End If
End Sub

For Each WS In Worksheets の解説です。
Worksheetsには4つのシート「営業計画」「営業実績」「販促費」「機械費」すべてが含まれています。
Worksheetsのシートを一つずつ取り出して、変数WSにセットしています。
「営業計画」→「営業実績」→「販促費」→「機械費」の順番でセットされたシートの名前が”機械費”と一致するか判断しています。

最初はコレクションの概念が分かりにくいのです。
VBAを使い始めると、必要な情報をネットで検索します。
その中に For Each を使ったものに遭遇します。
その時はただプログラムコードをコピー&ペーストするのではなく コレクション・グループであることを思い出して下さい。