【業務自動化】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を一括結合|ツールの解説とサンプルコード

まずは、ツールがどのような動きをするのか、そしてどのような処理を行っているのかを説明します。

そのうえで、実際に動くサンプルスクリプトを紹介し、すぐに試せるようにしていきます。

あわせて読みたい
openpyxl使える関数・メソッド・クラス一覧【Excel自動化の基本リファレンス】
openpyxl使える関数・メソッド・クラス一覧【Excel自動化の基本リファレンス】
【Python】勉強猫がノートパソコンを前にして学習を始める様子。記事内の学習スタート用イラスト

このツールでできること|フォルダ内Excelの一括結合と前提条件

このツールは、指定したフォルダにある複数のExcelファイル(.xlsx形式)を読み込み、1つのExcelファイルにまとめて保存する仕組みです。

通常、各担当者が入力したデータを1つのファイルに統合するには、次のような作業が必要になります。

  • ファイルを1つずつ開く
  • コピー&ペーストで1つのシートに貼り付ける
  • 余分なヘッダー行を削除する
  • ファイルを保存する

こうした手順は数が増えるほど大変で、手作業だとミスも起こりがちです。

今回のツールを使えば、以下のような流れで自動処理できます。

  1. 実行すると、フォルダ選択のダイアログが表示される
  2. フォルダを選択すると、中にあるExcelファイル(.xlsx)がすべて読み込まれる
  3. シートの内容が順番に結合され、1つの新しいExcelにまとめられる
  4. 1行目のヘッダーは最初のファイルだけ残し、以降は自動でスキップされる
  5. 出力ファイルには実行日の日付が入り、たとえば 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ライブラリ
  • pathlibsys : ファイルや実行環境のパスを扱う標準ライブラリ
  • 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を複数扱う場面で大きな時短効果を発揮するはずです。

次のチャプターでは、さらに一歩進んで「テンプレート差し込みで請求書を量産する」ツールを作成し、実務で役立つ自動化の幅を広げていきましょう。

もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいExcel自動化学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

業務自動化の記事一覧

次のページ>>

記事URLをコピーしました