openpyxl を用いて複数シートの明細を 1 枚の「Summary」シートへ集約する手順

部署別や月別に分割された売上シートを、納品用に 1 枚へまとめ直したい場面は少なくありません。本稿では openpyxl を活用し、ブック内の各ワークシートからデータを抽出して 「Summary」シート に転記するサンプルコードと、その仕組みを丁寧にご説明いたします。


目次

1. サンプルファイル構成

シート名役割
DivisionA部門 A の売上明細
DivisionB部門 B の売上明細
(以降部門ごとに複数)
Summary集約結果を書き込むシート

前提
各部門シートでは 3 行目以降にデータ行が並び、3 列目 (C 列) から実データが開始しているものといたします。


2. ライブラリのインストール

pip install openpyxl

3. 集約スクリプト

from openpyxl import load_workbook

# 1) ブックを読み込み
wb_path = 'sales_report.xlsx'
wb_book = load_workbook(wb_path)

# 2) 集計先シートを取得
ws_summary = wb_book['Summary']

# 3) 集約用リストを作成
merged_rows = []

# 4) 2 枚目以降のシート([0] は Summary と想定)をループ
for ws in wb_book.worksheets[1:]:
    # 対象範囲:4 行目以降、C 列~最終列まで
    for row in ws.iter_rows(min_row=4,
                            max_row=ws.max_row,
                            min_col=3,
                            max_col=ws.max_column):
        # セル値と表示形式を保持
        merged_rows.append([(cell.value, cell.number_format) for cell in row])

# 5) Summary シートへ転記
for idx, row_data in enumerate(merged_rows, start=4):
    # 先頭列に連番を付与
    ws_summary.cell(idx, 2).value = idx - 3

    # 取得済みデータを書き込み
    for jdx, (val, fmt) in enumerate(row_data, start=3):
        tgt_cell = ws_summary.cell(idx, jdx)
        tgt_cell.value = val
        tgt_cell.number_format = fmt  # 元シートと同じ書式を維持

# 6) 保存
wb_book.save('sales_report_consolidated.xlsx')

4. 処理の流れ

ステップ詳細
① ブック読み込みload_workbook() で既存ファイルを開きます。
② 集約先シート取得Summary シートはテンプレート側であらかじめ用意しておくと安全です。
③‐④ データ抽出worksheets[1:] で Summary を除外し、各シートの 4 行目以降を走査します。
⑤ データ貼り付け取得した値と書式を保持しつつ、新しい行へ順に転記します。
⑥ 保存元ファイルを残したい場合は別名で出力します。

5. 応用アイデア

ニーズ実装ヒント
タイトル行の書式もコピーしたいiter_rows(min_row=3, max_row=3, …) でヘッダー行を取り込み、転記前に挿入
行の並び替えが必要merged_rows を pandas DataFrame に変換し、sort_values() 後に再度 openpyxl へ戻す
複数ブック横断で集約glob.glob('*.xlsx') でブック単位にループし、同じロジックを適用

まとめ

  • openpyxl の iter_rows() を使えば、セルの値だけでなく 表示形式も保持 してコピーできます。
  • 集約対象シートをリストで制御すると、追加・削除に柔軟に対応できます。
  • ルーチン業務に組み込めば、部門別や月別のシートを短時間で 一括集計 でき、レポート作成工数を大幅に削減できます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次