請求書や報告書など、毎月届くExcelファイルの一部情報をまとめて1つのファイルに転記(集計)したいというニーズは多くの現場で見られます。本記事では、Pythonとopenpyxlを使って、指定フォルダ内のExcelファイルを読み取り、必要なセルだけを新しいファイルにまとめるスクリプトをご紹介いたします。
目次
想定する処理の概要
- 「sheets」フォルダ内に複数のExcelファイル(
.xlsx
)が保存されている - 各ファイルの「報告書」シートに入力された特定セル(たとえば
C5
とG8
)の値を取得 - 新規Excelファイル(
summary.xlsx
)の「集計」シートに1行ずつ転記 - 金額や日付などの書式も保持
Pythonスクリプト:複数ブックから転記して集計ファイルを作成
from pathlib import Path
from openpyxl import load_workbook, Workbook
# 新規ファイル作成と初期設定
summary_book = Workbook()
summary_sheet = summary_book.active
summary_sheet.title = '集計'
summary_sheet.column_dimensions['A'].width = 25
# データ取得対象のフォルダ
source_folder = Path('./sheets')
for index, excel_file in enumerate(source_folder.glob('*.xlsx')):
source_book = load_workbook(excel_file, data_only=True)
report_sheet = source_book['報告書']
row_num = index + 1
summary_sheet.cell(row_num, 1).value = report_sheet['C5'].value
summary_sheet.cell(row_num, 2).value = report_sheet['G8'].value
summary_sheet.cell(row_num, 2).number_format = report_sheet['G8'].number_format
# 出力ファイルとして保存
summary_book.save('summary.xlsx')
処理のポイント
処理内容 | 説明 |
---|---|
Path('./sheets') | 対象となるExcelファイルが格納されているフォルダを指定 |
load_workbook(..., data_only=True) | 計算式ではなくセルの表示値を取得する |
enumerate() | ファイルごとに転記先の行番号を自動的に決定 |
.number_format | 金額や日付のセル書式を引き継ぐための設定 |
出力結果のイメージ(summary.xlsx)
A列(顧客名など) | B列(金額や日付) |
---|---|
株式会社テスト | ¥125,000 |
サンプル有限会社 | ¥98,000 |
有限会社ABC | ¥85,000 |
応用ポイント
- 対象セルの位置(例:
C5
やG8
)は実運用にあわせて柔軟に変更可能です。 - ファイル名から日付や顧客名を抽出して一緒に記録することもできます。
- 出力先のフォーマットを整える処理(罫線や色付けなど)を加えることも可能です。
注意点
.xlsx
形式以外(例:.xls
)には対応していないため、古い形式のファイルは事前に変換が必要です。- ファイル数が多い場合、処理に時間がかかるため、進捗表示やエラーログを追加することもおすすめです。
まとめ
Pythonとopenpyxlを使えば、複数のExcelファイルから特定の情報だけを抽出して一括転記する作業を自動化できます。
毎月の集計業務や報告書のとりまとめを効率化したい方にとって、非常に強力なソリューションとなるでしょう。