エクセル実践塾 > エクセル実践塾2007

ブックにたくさんのシートがあり、それぞれのB2セルに入力してあるデータを、それぞれのシートの名前にしたい

 

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セルのデータと同じになります。