【Excelマクロ】複数シートの内容を1シートにまとめてレポート化

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シートで分かりやすく整理

このマクロを活用すれば、毎回同じ作業を繰り返す必要がなくなり、確認や加工に集中できる時間を確保できます。

日々の業務改善に、ぜひ取り入れてみてください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール