毎週月曜の朝、先週分の日報をひたすらExcelにコピペしていませんか。
ラインAの日報を開いて、ラインBの日報を開いて、数値をまとめ用シートに転記して…。その作業、1時間近くかかっているのではないでしょうか。
私が生産管理を7年担当していた頃、この「日報まとめ」が1週間で最も嫌いな仕事でした。データを集めているだけで何も生産していない感覚があって、正直かなりモヤモヤしていました。
Pythonでこの作業を自動化してから、月曜の朝に日報を手動でまとめることはなくなりました。コードを実行するだけで数分以内に集計が終わります。
この記事では、製造業・事務系の日報フォーマット(Excel)を前提に、Pythonで日報を自動集計する手順を実装コード付きで解説します。Pythonが初めての方でも動かせるように、前提条件とよくあるエラーへの対処法も含めて説明します。
この記事を読むとできること
- 複数の日報Excelを1つのファイルにまとめる
- 担当者別・日付別の集計表を自動作成する
- 集計結果をExcelに保存する
- (発展)毎日自動で実行するように設定する
Pythonを使うのが初めての方は、まず環境構築からはじめてください。
→ WindowsPCでPythonを始める方法【現場社員向け】
日報集計の手作業コスト
よくある日報集計の実態
製造業の現場では、こういう状況がよくあります。
- ラインA・ラインB・ラインCそれぞれが日報Excelを作成し、共有フォルダに保存する
- 週末や月末になると、誰かが全ファイルを開いて数値をコピペして集計表を作る
- その集計表を上司に提出する
この「誰かが」というのが曲者で、担当者が休んだり異動したりすると一気に属人化します。私の職場でも「月末の集計は〇〇さんしかわからない」という状態がしばらく続いていました。
手作業の時間を計算してみると、ファイル数×開く時間+転記時間だけで、週に1〜2時間、月に換算すると4〜8時間が「コピペ作業」に消えているケースも珍しくありません。
Pythonで自動化すると何が変わるか
- 全員が決まったフォルダに日報を保存する(これは今と同じ)
- コードを実行するだけで全ファイルを読み込んで集計
- 集計結果を自動でExcelに出力
実行時間は、ファイルが20〜30本あっても1分かかりません。月8時間の作業が月に数分まで短縮できます。
準備:必要なライブラリと環境確認
pandasとopenpyxlのインストール
このコードで使うライブラリは2つです。
pip install pandas openpyxl
コマンドプロンプトで上記を実行するだけです。すでにAnacondaをインストールしている方はpandasは入っているはずですが、openpyxlは別途必要な場合があります。
インストールが不安な方は、まずGoogle Colabで試すのがおすすめです。ブラウザだけで動くので、会社のPCに何も入れなくて済みます。
日報ファイルの前提条件(ここが一番重要)
このコードは、以下の形式の日報を前提にしています。
前提条件:
- 日報はExcelファイル(.xlsx形式)
- 全ての日報ファイルに同じ列名がある(例:「日付」「担当者名」「ライン名」「生産数」「不良数」「作業時間」)
- すべての日報ファイルを1つのフォルダに入れてある
この「列名が統一されている」というのが最重要です。列名がファイルによってバラバラな場合(「生産数」と「製造数」が混在するなど)は、コードが動きません。
列名の確認はExcelを開いて1行目を見るだけです。全ファイルで同じ言葉が並んでいればOK。バラバラなら統一してから進んでください。
実装①:複数の日報Excelを一括で読み込む
1フォルダに日報を集める
まず、集計したい日報ファイルをすべて1つのフォルダに入れてください。
C:\日報集計\
├─ 2026-03-31_ラインA.xlsx
├─ 2026-03-31_ラインB.xlsx
├─ 2026-04-01_ラインA.xlsx
└─ 2026-04-01_ラインB.xlsx
コード:フォルダ内の全Excelを読み込む
import pandas as pd
import glob
import os
# 日報ファイルが入っているフォルダのパス
folder_path = r"C:\日報集計"
# フォルダ内の全Excelファイルを取得
files = glob.glob(os.path.join(folder_path, "*.xlsx"))
# 全ファイルを読み込んでリストに追加
df_list = []
for file in files:
df = pd.read_excel(file)
df_list.append(df)
# 1つのデータフレームに結合
df_all = pd.concat(df_list, ignore_index=True)
print(f"{len(files)}件のファイルを読み込みました")
print(df_all.head())
このコードを実行すると、フォルダ内の全Excelが1つの表(データフレーム)にまとまります。
よくあるエラーと対処法
エラー①:FileNotFoundError(ファイルが見つからない)
folder_path に指定したパスが間違っている可能性があります。フォルダのパスをエクスプローラーのアドレスバーからコピーして、先頭に r をつけてください。
# 例:r"C:\Users\yamada\Documents\日報集計"
エラー②:文字化けする
pd.read_excel() はExcelの文字コードを自動で読み取るため、通常は文字化けしません。もし発生する場合は、Excelファイルを開いて「名前を付けて保存」→「Excel ブック(.xlsx)」で保存し直してみてください。
エラー③:列名が一致しないエラー(concat時)
各ファイルの列名が揃っていない場合に発生します。列名を統一するか、pd.concat(..., sort=False) オプションを追加してみてください。
実装②:担当者・日付別に集計する
フォルダ内の全日報データが1つの表になったので、次は集計します。
コード:日付・ライン別の集計
# 日付とライン名でグループ化して集計
summary = df_all.groupby(["日付", "ライン名"]).agg(
生産数合計=("生産数", "sum"),
不良数合計=("不良数", "sum"),
作業時間合計=("作業時間", "sum")
).reset_index()
# 不良率を計算して追加
summary["不良率(%)"] = (summary["不良数合計"] / summary["生産数合計"] * 100).round(2)
print(summary)
groupby の中の列名は、実際の日報の列名に合わせて変更してください。担当者別に集計したい場合は ["日付", "担当者名"] に変えるだけです。
事務系・管理部門の方は「ライン名」「生産数」「不良数」を「担当者名」「処理件数」「対応時間」などご自身の日報の列名に置き換えるだけで、同様に使えます。
集計結果のサンプル出力イメージ
| 日付 | ライン名 | 生産数合計 | 不良数合計 | 不良率(%) |
|---|---|---|---|---|
| 2026-03-31 | ラインA | 1,200 | 12 | 1.00 |
| 2026-03-31 | ラインB | 980 | 8 | 0.82 |
| 2026-04-01 | ラインA | 1,150 | 15 | 1.30 |
手作業で各ファイルを開いて計算していた表が、コードを実行するだけで出てきます。
実装③:集計結果をExcelに保存する
集計結果はそのままだと次回実行時に消えてしまいます。Excelに保存して残しておきましょう。
# ※ 実装①②のコードに続けて実行してください
from datetime import datetime
today = datetime.today().strftime("%Y%m%d")
output_path = os.path.join(folder_path, f"集計結果_{today}.xlsx")
# Excelに保存
summary.to_excel(output_path, index=False)
print(f"保存完了:{output_path}")
実行するたびに日付付きのファイル名で保存されるので、過去の集計結果が上書きされる心配がありません。
発展:毎日自動で実行する(Windowsタスクスケジューラ)
コードが動くようになったら、毎日自動で実行するように設定すると「本当の自動化」が完成します。
手順の流れ
- Pythonコードを
.pyファイルとして保存する(例:nippo_shuukei.py) - Windowsの「タスクスケジューラ」を開く(スタートメニューで検索)
- 「基本タスクの作成」→ 実行時刻・頻度を設定
- 「プログラムの開始」で
python.exeと.pyファイルのパスを指定する
python.exe のパスは、コマンドプロンプトで where python と入力すると確認できます。
> where python
C:\Users\yamada\AppData\Local\Programs\Python\Python311\python.exe
このパスをタスクスケジューラの「プログラム/スクリプト」欄に貼り付けてください。
設定後は毎朝指定した時刻にコードが自動実行され、集計結果ファイルが共有フォルダに保存されます。翌朝には集計が終わっているという状態になります。
Windowsタスクスケジューラの詳しい設定方法は、WindowsPCでPythonを始める方法の記事でも触れています。
まとめ
この記事で紹介したのは以下の流れです。
- 日報ファイルを1フォルダに集める
globでフォルダ内の全Excelを読み込むconcatで1つの表に結合するgroupbyで日付・ライン別に集計するto_excelで結果を保存する
コードの量は多くありませんが、これだけで毎週の手作業集計がなくなります。
製造業でPythonが役立つ場面はこれだけではありません。生産実績の集計・在庫管理・品質データの分析など、現場の繰り返し作業はほぼPythonで自動化できます。
→ 製造業でPythonは何に使えるのか|現場7年間で実際に使った5つの使い道
Pythonをゼロから始めたい方はこちら。
→ 総務初心者がPythonを始める方法|来週月曜から使えるようになる手順
今回紹介したコードは「同一フォーマットの日報」を前提にした基本版です。
実際の現場では、こういうことがよく起きます。
- ラインによって列名が微妙に違う(「生産数」と「製造数量」が混在している)
- ファイルが壊れていたり、誰かが別の形式で保存していたりする
- 集計後、上司に自動でメール送信したい
これらに対応したエラーハンドリング完全版+複数フォーマット対応+自動メール送信付きのコードセットはNoteで配布予定です。サンプルデータ付きで、コピペしてフォルダパスを変えるだけで動くように整理しています。公開をお知らせするので、いがだるまブログのトップページからメルマガ登録しておいてください。