For Each...Next ステートメントを使えば、編集中のブックに含まれるすべてのシートを対象にして、同じ処理を実行することができます
前々号で解説したマクロを使えば、B2セルに入力してあるデータを、そのシートの名前にすることができます。しかし、対象となるシートの枚数が多い場合、シートを切り替えながらそのマクロを実行していくのは、あまり実用的とは言えないでしょう。
編集中のブックに含まれるシートは、シートという同じ種類のオブジェクト (要素) の集合です。この集合は、コレクションと呼ばれます。For
Each...Next ステートメントを使えば、そのコレクションに含まれるすべてのオブジェクトを対象に、同じ処理を実行することができます。
前々号で解説したマクロの処理を、For Each...Next
ステートメントで、すべてのシートを対象に実行する場合は、次のようなマクロになります。
Sub SheetNameChange()
Dim TargetSheet As Worksheet
For Each TargetSheet In Worksheets
With TargetSheet
.Name = .Range("B2")
End With
Next
End Sub
For Each...Next ステートメントでは、コレクションの各要素を代入する変数が必要となります。「TargetSheet」がその変数で、各ワークシートを代入できるように、Worksheetオブジェクト型で宣言してあります。
「Worksheets」は、編集中のブックに含まれるすべてのワークシートを表します。このコレクションから、各ワークシートを対象にしながら、B2セルのデータをシート名にしていく処理を繰り返します。

SheetNameChangeマクロを実行すると、編集中のブックに含まれるすべてのワークシートの名前が、そのワークシートのB2セルのデータと同じになります。