【VBA】For Each文でワークシートを操作する。

Excel・VBA

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ステートメントは、ワークブック内のシート操作をするうえで非常に便利です。

ぜひ使ってみてください。

コメント

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