【業務自動化】Chapter3-1:Excelファイルをフォルダ丸ごと結合しよう

一つ前のチャプターでは PyInstallerによる簡単な自動化ツールの作成 を体験しました。
今回からは 実際に業務で使える便利な自動化ツール を1つずつ作成していきましょう。
Chapter1:PythonによるExcel自動化の基本を身につけよう
Chapter2:自動化ツールを.exe化して配布しよう
Chapter3:現場で使える便利な自動化ツールを4つ作ろう
・Chapter3-1:Excelファイルをフォルダ丸ごと結合しよう ◁今回はここ
・Chapter3-2:テンプレートを使った請求書自動作成
・Chapter3-3:グラフ付き売上レポート自動生成ツールを作ろう
・Chapter3-4:勤怠の丸め・残業集計自動化ツールを作ろう
Chapter4:Webスクレイピングでデータを自動で集めよう
Chapter5:自動化ツールを作ってお金を稼ごう
日々の業務で複数のExcelファイルを扱う場面は少なくありません。
例えば、担当者ごとに月次売上データを入力している場合、それらを毎月1つのファイルにまとめるのは手間のかかる作業です。
こうした「単純だけど時間のかかる作業」こそ、Pythonとopenpyxlを使った自動化の出番です。
この記事では、指定したフォルダに入っている複数のExcelファイルを自動で1つに結合するツール を作成します。
ファイルを選んで実行するだけで、すべてのデータが1つのExcelにまとまるので、集計作業がぐっと効率化します。
openpyxlでExcelを一括結合|ツールの解説とサンプルコード
まずは、ツールがどのような動きをするのか、そしてどのような処理を行っているのかを説明します。
そのうえで、実際に動くサンプルスクリプトを紹介し、すぐに試せるようにしていきます。


このツールでできること|フォルダ内Excelの一括結合と前提条件
このツールは、指定したフォルダにある複数のExcelファイル(.xlsx形式)を読み込み、1つのExcelファイルにまとめて保存する仕組みです。
通常、各担当者が入力したデータを1つのファイルに統合するには、次のような作業が必要になります。
- ファイルを1つずつ開く
- コピー&ペーストで1つのシートに貼り付ける
- 余分なヘッダー行を削除する
- ファイルを保存する
こうした手順は数が増えるほど大変で、手作業だとミスも起こりがちです。
今回のツールを使えば、以下のような流れで自動処理できます。
- 実行すると、フォルダ選択のダイアログが表示される
- フォルダを選択すると、中にあるExcelファイル(.xlsx)がすべて読み込まれる
- シートの内容が順番に結合され、1つの新しいExcelにまとめられる
- 1行目のヘッダーは最初のファイルだけ残し、以降は自動でスキップされる
- 出力ファイルには実行日の日付が入り、たとえば
merged_20250918.xlsxのように保存される
このように、手作業で行っていたコピー&ペーストを完全に自動化できるのが大きなメリットです。
サンプルデータを自動生成|Make_Sample_Excelの使い方
実際にツールを試すときに「結合するためのExcelファイルが手元にない」という方も多いでしょう。
そこで練習用として、売上データのサンプルを自動生成するスクリプトを用意しました。
このスクリプトでは以下のライブラリを利用しています。
- pathlib : ファイルのパスを扱う標準ライブラリ
- pandas :表形式データの処理や分析を行うためのライブラリ
pandasがまだインストールされていない場合は、先にインストールしましょう。
pip install pandas
以下のコードをChapter3-1フォルダに保存して実行してください。
import pandas, pathlib
# サンプルデータを作成
data_january = {
"日付": ["2025-01-05", "2025-01-12", "2025-01-19"],
"商品": ["りんご", "みかん", "バナナ"],
"数量": [10, 20, 15],
"金額": [3000, 4000, 2250]
}
data_february = {
"日付": ["2025-02-03", "2025-02-15", "2025-02-27"],
"商品": ["ぶどう", "りんご", "みかん"],
"数量": [12, 18, 25],
"金額": [3600, 5400, 5000]
}
data_march = {
"日付": ["2025-03-10", "2025-03-18", "2025-03-29"],
"商品": ["バナナ", "いちご", "りんご"],
"数量": [20, 8, 14],
"金額": [3000, 2400, 4200]
}
# フォルダを作成(なければ自動作成)
output_dir = pathlib.Path(__file__).parent / "workbooks"
output_dir.mkdir(exist_ok=True)
# DataFrameに変換してExcelとして保存
pandas.DataFrame(data_january).to_excel(output_dir / "sales_january.xlsx", index=False)
pandas.DataFrame(data_february).to_excel(output_dir / "sales_february.xlsx", index=False)
pandas.DataFrame(data_march).to_excel(output_dir / "sales_march.xlsx", index=False)
print(f"サンプルExcelファイルを {output_dir} に作成しました。")このスクリプトを実行すると、次のような内容のExcelファイルが自動で作成されます。
- 1月分の売上データ:
sales_january.xlsx - 2月分の売上データ:
sales_february.xlsx - 3月分の売上データ:
sales_march.xlsx
各ファイルには、日付・商品名・数量・金額といった売上データが数件ずつ記録されています。
つまり「複数の担当者や月ごとの売上ファイルがあり、それらを1つにまとめたい」という典型的なシナリオを再現できるわけです。
フォルダ内Excelを結合するサンプルコード
ここからは、フォルダ内の複数のExcelファイルを1つに結合するサンプルスクリプトを紹介します。
このスクリプトでは以下のライブラリを利用しています。
- openpyxl : Excelファイルを読み書きするためのライブラリ
- tkinter : フォルダ選択やメッセージ表示を行うGUIライブラリ
- pathlib と sys : ファイルや実行環境のパスを扱う標準ライブラリ
- datetime : 出力ファイル名に実行日の日付を付けるための標準ライブラリ
openpyxl や tkinter がまだインストールされていない場合は、先にインストールしましょう。
pip install ライブラリ名
このスクリプトを実行すると、ユーザーがフォルダを選ぶだけで、その中にあるExcelファイル(.xlsx)の内容を1つの新しいExcelファイルに結合します。
また出力ファイルには実行日の日付が入るようにしています。
以下のコードをChapter3-1フォルダに保存して実行してください。
import openpyxl, pathlib, sys, tkinter
from tkinter import filedialog, messagebox
from datetime import datetime # 日付を扱う標準モジュールを追加
# 実行環境に応じた基準ディレクトリ
if getattr(sys, 'frozen', False):
BASE_DIR = pathlib.Path(sys.executable).parent # exe化された場合
else:
BASE_DIR = pathlib.Path(__file__).parent # pyとして実行する場合
file_path = BASE_DIR / "workbooks" # 出力先フォルダ
file_path.mkdir(exist_ok=True)
# Tkinterルート(非表示で使う)
root = tkinter.Tk()
root.withdraw()
# 結合対象フォルダを選択
excel_dir = filedialog.askdirectory(
title="結合するExcelファイルが保存されたフォルダを選択してください",
initialdir=BASE_DIR
)
if not excel_dir:
messagebox.showerror("エラー", "フォルダが選択されませんでした")
sys.exit(1)
excel_dir = pathlib.Path(excel_dir)
excel_files = sorted(excel_dir.glob("*.xlsx"))
if not excel_files:
messagebox.showerror("エラー", "Excelファイルが見つかりません")
sys.exit(1)
# 新しいブックを作成
merged_book = openpyxl.Workbook()
merged_sheet = merged_book.active
merged_sheet.title = "merged_data"
row_offset = 0
header_written = False
for excel_file in excel_files:
try:
book = openpyxl.load_workbook(excel_file)
sheet = book.active # 1枚目のシートを対象とする
except Exception as e:
messagebox.showwarning("警告", f"{excel_file.name} を開けませんでした: {e}")
continue
# データをコピー
for row_idx, row in enumerate(sheet.iter_rows(values_only=True), start=1):
if row_idx == 1 and header_written:
continue
write_row = row_offset + row_idx if not header_written else row_offset + row_idx - 1
for col_idx, value in enumerate(row, start=1):
merged_sheet.cell(row=write_row, column=col_idx, value=value)
if not header_written:
header_written = True
row_offset = merged_sheet.max_row
# 保存
today = datetime.now().strftime("%Y%m%d") # 例: 20250918
output_file = file_path / f"merged_{today}.xlsx"
merged_book.save(output_file)
messagebox.showinfo("完了", f"Excelファイルを結合しました!\n保存先: {output_file}")このスクリプトを実行し、先ほど紹介したサンプルデータのフォルダを選択すれば、3つのExcelファイルが結合されて workbooks フォルダに保存されます。
Chapter2-1 で解説した、PyInstallerを用いたツール化(exe化)も忘れずに実行しましょう。
まとめ|業務で使えるopenpyxlのExcel結合
今回のチャプターでは、フォルダ内の複数Excelファイルを自動で1つに結合するツール を作成しました。
この仕組みを理解すれば、「ファイルを一括で処理する」タイプのあらゆる業務自動化に応用できるようになります。
売上データやアンケート結果など、同じ形式のExcelを複数扱う場面で大きな時短効果を発揮するはずです。
次のチャプターでは、さらに一歩進んで「テンプレート差し込みで請求書を量産する」ツールを作成し、実務で役立つ自動化の幅を広げていきましょう。


