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

コメント