For Each…Nextステートメントを使用してワークブック内のシートを操作する方法を紹介します。
ワークブック内の複数のシートに対して処理をしたいときに便利です。
For Each Next ステートメントの基本
For each Nextステートメントは、与えられた配列やコレクションの要素に対して処理を繰り返します。
For Each element In group 処理内容 Next
elementに指定できるデータ型は、
- コレクションの場合:Variant変数、ジェネリック オブジェクト変数、または特定のオブジェクト変数のみを指定可能。
- 配列の場合:Variant変数のみ指定可能。
またgroupには、オブジェクトのコレクションまたは配列の名前を指定します。
For Each Nextステートメントで配列内のデータを処理する。
使い方の例として、配列内のデータをとりだし、メッセージボックスに表示させる方法です。
Sub sample()
Dim season As Variant
Dim list() As Variant: list = Array("春", "夏", "秋", "冬")
For Each season In list
MsgBox ("季節は" & season)
Next
End Sub
ワークブック内のすべてのシートを操作する
element にWorksheetオブジェクトの変数を指定し、groupにWorksheetsコレクションを指定することでワークブック内のすべてのシートに対して処理を行えるようになります。
ワークシートの数や名称を指定する必要がないので、シート数やシート名が変化する場合にも使用できます。
以下は、ワークブック内のすべてのシートに対して、セル番号(1,1)のセルへシート名を記入するコードです。
Sub sample2()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Cells(1, 1) = ws.Name
Next
End Sub
このコードの説明は次の通りです。
他のワークブック内のシートを対象とする場合
他のワークブックを対象とする場合は、上記のサンプルコード2を次のようにします。
例として、操作対象のワークブックは”ダミー”という名称とします。
Sub sample3()
Dim ws As Worksheet
Dim wb As String: wb = "ダミー.xlsx"
For Each ws In Workbooks(wb).Worksheets
ws.Cells(1, 1) = ws.Name
Next
End Sub
サンプルコード2との違いは、groupの指定がWorkbooks(wb).Worksheetsとなっていることです。
このようにすることで、操作対象のワークブックを変えて処理をすることができます。
まとめ
For Each Nextステートメントは、ワークブック内のシート操作をするうえで非常に便利です。
ぜひ使ってみてください。
コメント