Excelで月別シートや部門別シートにデータが分かれていると、それぞれを確認して集計するのに手間がかかります。
特に、毎月の業務報告や分析レポートを作成する場面では、「すべてのシートから共通の列だけ抜き出して1シートにまとめたい」というニーズがよくあります。
このような作業をVBAで自動化すれば、シートの数が増えてもボタン一つでレポート化が完了し、集計作業の時間を大幅に短縮できます。
複数シートを1シートにまとめるマクロの具体例
次のマクロは、すべてのワークシートから特定の範囲を取得し、”Report”という名前のシートに順番に貼り付けていく処理です。
Sub MergeSheetsToReport()
Dim ws As Worksheet
Dim rpt As Worksheet
Dim r As Long
Dim lastRow As Long
' 出力先シートを準備(なければ作成)
On Error Resume Next
Set rpt = Worksheets("Report")
If rpt Is Nothing Then
Set rpt = Worksheets.Add
rpt.Name = "Report"
Else
rpt.Cells.Clear
End If
On Error GoTo 0
r = 1 ' 出力先の行番号
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Report" Then
' コピー元シートの最終行を取得
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' タイトル行がある場合は、1行目のみ一度だけコピー
If r = 1 Then
ws.Rows(1).Copy rpt.Rows(r)
r = r + 1
End If
' 2行目以降をコピー
ws.Range("A2", ws.Cells(lastRow, ws.Cells(1, Columns.Count).End(xlToLeft).Column)).Copy rpt.Cells(r, 1)
' 貼り付けた行数分カウントアップ
r = rpt.Cells(rpt.Rows.Count, 1).End(xlUp).Row + 1
End If
Next ws
MsgBox "全シートのデータをReportに統合しました", vbInformation
End Sub
コードのポイント
Worksheets("Report"):統合用の出力先シートです。なければ作成し、あれば初期化します。UsedRangeは使っていませんが、Cells(ws.Rows.Count, 1).End(xlUp).Rowによりデータの最終行を取得しています。- 各シートの1行目(タイトル行)は一度だけコピーし、それ以降は2行目以降のみを統合します。
実装するメリット
このようなレポート統合マクロを導入することで、次のようなメリットがあります。
- 毎月のレポート作成を自動化できる
- シート数が増えても作業時間が変わらない
- データ構造が共通であれば、複数部署や複数商品データにも対応できる
- 手作業によるコピーミスや抜け漏れを防止できる
- VBAに慣れてきたら、条件付き抽出や集計の追加も可能
繰り返し使う定型レポートであればあるほど、マクロによる統合処理の効果は大きくなります。
まとめ
複数のシートに分かれたデータを1シートに統合する処理は、Excel業務の自動化において非常に有効です。
- すべてのワークシートをループ処理でまわす
- 見出し行(1行目)は1回だけ転記
- データ部分だけを行単位で統合
- 出力専用のReportシートで分かりやすく整理
このマクロを活用すれば、毎回同じ作業を繰り返す必要がなくなり、確認や加工に集中できる時間を確保できます。
日々の業務改善に、ぜひ取り入れてみてください。


