書き換えポイント
| 変数・箇所 | 説明 | 初期値 |
|---|---|---|
skipSheets |
スキップするシート名の配列。追加・削除は Array(...) 内を変更するだけ |
Array("目次", "集計", "マスタ") |
'--- ★書き換えポイント2 |
各シートで実行したい処理 | ヘッダー挿入+書式設定(デモ用) |
コードの流れ
- スキップ対象の定義:
Array("目次", "集計", "マスタ")でスキップするシート名を配列で指定 - 非表示チェック:
ws.Visible <> xlSheetVisibleなら処理をスキップ - シート名チェック:
IsInArray関数でスキップ対象に含まれるか確認 - 処理の実行: 対象シートにヘッダー挿入+書式設定
- 完了メッセージ: 処理したシート数を表示
全シートにヘッダーを挿入した後、ボタン(マクロをボタン1つで実行する方法)を設置すれば、次回からはワンクリックで一括処理できる。
よくある落とし穴5選
1. ws. を付け忘れてアクティブシートだけ処理される
原因: Range("A1").Value = "test" と書くと、ループ中ずっとアクティブシートのA1を操作する。
対策: 必ず ws.Range("A1") のようにシート変数を付ける。ws.Cells, ws.Rows も同様。
2. 目次シートや集計シートまで処理してしまった
自分もこれで痛い目にあった。For Eachで全シートにヘッダー挿入を実行したら、「目次」シートにもヘッダーが入ってしまい、目次のリンクが全部ずれた。戻すのに1時間かかった。目次シートまでぶっ壊すとは思わなかった。
対策: 実務版のように skipSheets 配列でスキップ対象を事前に定義する。
3. 非表示シートも処理されてしまう
原因: For Each ws In Worksheets は非表示シートも含む。非表示にしていたマスタシートが書き換えられる可能性がある。
対策: ws.Visible <> xlSheetVisible でスキップする。実務版コードには組み込み済み。
4. シート名の全角・半角やスペースが一致しない
原因: If ws.Name = "目次" と書いたが、実際のシート名が「目次 」(末尾に半角スペースあり)だった。
対策: If Trim(ws.Name) = "目次" のように Trim(文字列の前後のスペースを除去する関数)でスペースを除去してから比較する。
5. ループ中にシートを追加/削除するとエラーになる
原因: For Each ループの途中でシートのコレクションを変更すると、VBAが混乱してエラーが出る。
対策: ループ中はシートの追加・削除をしない。必要なら、ループ前にシート名を配列に格納し、配列でループする。
FAQ
Q1: 特定のシートだけを処理したい(全シートではなく)
スキップではなく対象シートを指定したい場合は、対象シート名を配列に入れて一致チェックする:
Dim targetSheets As Variant
targetSheets = Array("1月", "2月", "3月")
For Each ws In ThisWorkbook.Worksheets
If IsInArray(ws.Name, targetSheets) Then
' 対象シートの処理
ws.Range("A1").Value = "処理済み"
End If
Next ws
Q2: 処理の進捗をリアルタイムで確認したい
ステータスバーに進捗を表示する:
Dim total As Long
total = ThisWorkbook.Worksheets.Count
For Each ws In ThisWorkbook.Worksheets
count = count + 1
Application.StatusBar = "処理中... " & count & " / " & total & " シート"
' --- 処理 ---
Next ws
Application.StatusBar = False ' ステータスバーを元に戻す
Q3: 全シートに色分けを一括適用したい
ループ内で色分け処理を呼び出す。色分けの方法は セルの値に応じて行を自動色分け を参照。
For Each ws In ThisWorkbook.Worksheets
Call ColorByValue(ws) ' 各シートを引数で渡す
Next ws
Q4: 全シートのデータを1つのシートに集約したい
これは「複数シートの一括処理」とは別のテーマ。複数Excelファイルを1つに統合する方法は 複数Excelファイルを1つに統合 を参照。1ファイル内のシート統合もループで可能だが、処理内容が複雑になるためカスタマイズの範囲。
Q5: ボタン1つで全シート処理を実行したい
マクロをボタン1つで実行する方法 で、ProcessSheetsWithSkip をボタンに割り当てる。シート上に「全シート一括処理」ボタンを置けば、同僚にも簡単に使ってもらえる。
まとめ
For Each ws In ThisWorkbook.Worksheetsで全シートをループできるws.Range("A1")のようにシート変数を付けないと、アクティブシートだけ処理される(最大の落とし穴)- スキップ対象は配列で管理し、非表示シートも除外すると安全
- シート数が増えてもコードの変更は不要。ループが自動で全シートを処理する
関連記事
- 複数Excelファイルを1つに統合 — 複数ファイルの統合はこちら。1ファイル内の複数シート処理は本記事
- セルの値に応じて行を自動色分け — 全シートに色分けを一括適用する応用
- マクロをボタン1つで実行する方法 — 一括処理マクロをボタンに割り当て
次にやりたくなること
- ExcelファイルをPDFに一括変換: 全シートを処理した後、まとめてPDF出力。月次報告書の作成に直結する
- 特定の文字を含むセルを検索してハイライト: 全シートを横断して特定の文字を検索&ハイライト
もっとカスタマイズしたい場合
「全シートの集計結果を1つのサマリーシートにまとめたい」「シートごとに異なる条件で処理を分けたい」「処理結果をメールで自動送信したい」など、業務に合わせたカスタマイズが必要な場合は、ココナラで相談できる。
相談時に伝えると話が早い情報:
- Excel のバージョン / OS
- シートの枚数と構成(月別/拠点別など)
- 各シートに実行したい処理の内容
- スキップしたいシートの有無


コメント