毎月・毎週、複数の担当者やお店から送られてくるExcelファイルを、手作業で1つのファイルにまとめていませんか? この作業はPythonで数行のコードにより自動化できます。この記事では、実際に動くコードを使いながら、複数Excelファイルの集計を自動化する方法を簡潔に解説します。
こんな作業をしている人向けの記事です
- 複数店舗・複数担当者から送られてくるExcelファイルを、毎回コピペで1つにまとめている
- ファイルごとにフォーマットは同じだが、数が多くて時間がかかる
- 集計作業を「今月も同じことをやるのか…」とうんざりしながらやっている
こうした作業は、フォーマットさえ揃っていれば自動化との相性が抜群です。
使うライブラリ
今回はpandasを使います。表形式データの読み込み・結合・集計が得意なライブラリです。
pip install pandas openpyxl
openpyxlは、pandasがExcelファイル(.xlsx)を読み込む際の内部処理で必要になるため、合わせてインストールします。
基本の考え方
やることは3ステップだけです。
- 対象フォルダの中にあるExcelファイルを一覧で取得する
- それぞれのファイルを読み込んで、1つの表に結合する
- 結合した表を、新しいExcelファイルとして出力する
サンプルコード
import pandas as pd
import glob
# 集計対象のフォルダにあるExcelファイルを全て取得
file_list = glob.glob("data/*.xlsx")
# 各ファイルを読み込んでリストに格納
df_list = []
for file in file_list:
df = pd.read_excel(file)
df["ファイル名"] = file # どのファイル由来かが分かるよう列を追加
df_list.append(df)
# 全てのデータを1つの表に結合
merged_df = pd.concat(df_list, ignore_index=True)
# 結合結果を新しいExcelファイルに出力
merged_df.to_excel("集計結果.xlsx", index=False)
print(f"{len(file_list)}件のファイルを集計しました")
ポイント解説
glob.glob("data/*.xlsx"):dataフォルダの中にある、拡張子が.xlsxのファイルを全て取得します。フォルダ名は自分の環境に合わせて変更してください。pd.concat(df_list, ignore_index=True):複数の表を縦につなげて1つにまとめます。ignore_index=Trueを付けることで、行番号が振り直されます。df["ファイル名"] = file:どのファイルの行だったかが後から分かるように、目印の列を追加しています。集計後に「どの店舗のデータか分からなくなる」というトラブルを防げます。
よくあるつまずきポイント
- 列名が微妙に違う:ファイルによって列名が「日付」「Date」のように揺れていると、結合時にうまくまとまりません。読み込み後に
df.rename(columns={...})で列名を統一する処理を挟むと安定します。 - 1行目がタイトルになっている:見出し行の前に会社名などのタイトル行が入っているファイルがあると、データがずれて読み込まれます。
pd.read_excel(file, skiprows=1)のように、読み飛ばす行数を指定すると解決できます。 - シートが複数ある:デフォルトでは最初のシートしか読み込まれません。特定のシートを指定したい場合は
pd.read_excel(file, sheet_name="集計用")のようにシート名を指定します。
応用:集計まで自動でやる
単純に結合するだけでなく、そのまま集計まで行うことも可能です。例えば店舗ごとの合計金額を出したい場合は、以下を追加します。
summary = merged_df.groupby("店舗名")["金額"].sum()
summary.to_excel("店舗別集計.xlsx")
groupbyは「指定した列の値ごとにグループ分けして集計する」処理です。店舗名ごとの合計金額を出す、といった集計作業がこの1行で完了します。
まとめ
複数ファイルの集計作業は、フォーマットさえ揃っていればpandasの数行のコードで自動化できます。まずは今回のコードを、自分の担当している集計作業のフォルダ構成に合わせて書き換えて試してみてください。
次回は、この集計結果を定型フォーマットに自動で転記する方法を解説します。

コメント