MENU

【初心者向け】シートを1枚ずつ処理するFor Eachの使い方を解説!

A子さん

「ブックにたくさんシートあるけど、毎回名前指定するの面倒すぎる……
一気に全部に処理できたらいいのになぁ……」

先輩

そんなときに活躍するのが、
For Eachでシートを1枚ずつ処理する方法です。

結論:For Eachを使えば、すべてのシートにまとめて処理できる!

Excel VBAでは、For Each構文を使えば、ワークブック内の全シートに対して自動的に繰り返し処理が可能です。
手作業で1枚ずつ処理する必要はもうありません!

目次

For Eachでシートを処理する基本構文

まずは基本形から見てみましょう。

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
    ' 各シートに対して処理を記述
Next ws

このように、Worksheetsコレクションから1枚ずつwsに取り出して処理します。
ポイントは、毎回シート名を指定しなくて済むという点です。

実例:すべてのシートに見出しを挿入する

例えば、すべてのシートのA1セルに「売上データ」と記載する場合:

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
    ws.Range("A1").Value = "売上データ"
Next ws

どれだけシートがあっても、これだけで対応できます。

非表示シート・グラフシートも対象になるので注意

Worksheetsを使うと、非表示のシートやチャートシートも処理対象になります。

If ws.Visible = xlSheetVisible Then
    ws.Range("A1").Value = "見えるシートだけ"
End If

このように条件分岐を加えることで、「表示されているシートだけ」に処理することも可能です。

特定のシートを除外したい場合の方法

「テンプレートシート」や「集計用シート」は除外したい…
そんなときは以下のように書きます:

If ws.Name <> "テンプレート" And ws.Name <> "集計" Then
    ' このシートには処理を行う
End If

シート名を比較するだけなので、複数除外も簡単です。

処理が不要な場合はExit Forで中断も可能

例えば、特定のシートを見つけた時点で処理を打ち切ることもできます。

If ws.Name = "完了済み" Then
    MsgBox "処理済みのシートを見つけました"
    Exit For
End If

無駄なループを避けたい場合や、目的のシートだけを対象にする時に便利です。

まとめ:複数シートの処理にFor Eachは超便利!

For Eachで1枚ずつ自動処理できる

手作業の繰り返しから解放される

非表示・特定シートの扱いも柔軟に対応可能

関連記事リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次