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



そんなときに活躍するのが、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枚ずつ自動処理できる
手作業の繰り返しから解放される
非表示・特定シートの扱いも柔軟に対応可能
コメント