Excel勤怠集計は「出勤・退勤・休憩・残業などの勤怠データを自動で計算し、給与計算に使える形へ整形する」ための最強スキル
あなたのように業務効率化を本気で考える人にとって、 勤怠集計の自動化は“ミス防止 × 時間削減 × 正確性向上”を同時に達成できる最重要領域 です。
勤怠は人が入力するため、 出勤漏れ、退勤漏れ、休憩未入力、日付ミス、フォーマット崩れなど エラーが非常に多い領域です。
Pythonを使えば、 勤怠データ読み込み → 時間計算 → 集計 → レポート化 まで完全自動化できます。
初心者でも理解できるように、例題を交えて丁寧に解説します。
勤怠集計の基本構造(最重要ポイント)
勤怠集計は次の4つで構成されます。
出勤・退勤の時間計算
時刻を datetime に変換し、勤務時間を計算します。
休憩時間の計算
休憩が複数あっても合計できます。
残業時間の計算
所定労働時間(例:8時間)を超えた分を計算します。
日次 → 月次 → 社員別の集計
給与計算に使える形に整形します。
勤怠データの例(よくあるExcel構造)
次のようなExcelを想定します。
- 日付
- 氏名
- 出勤時刻
- 退勤時刻
- 休憩時間(分)
- 備考
この構造を前提に、集計テンプレートを作ります。
勤怠集計の基本テンプレート(まずはこれを押さえる)
出勤・退勤から勤務時間を計算する例
import pandas as pd
df = pd.read_excel("kintai.xlsx")
df["出勤"] = pd.to_datetime(df["出勤時刻"])
df["退勤"] = pd.to_datetime(df["退勤時刻"])
df["勤務時間"] = (df["退勤"] - df["出勤"]).dt.total_seconds() / 3600
df["休憩時間"] = df["休憩時間(分)"] / 60
df["実働時間"] = df["勤務時間"] - df["休憩時間"]
df.to_excel("kintai_calculated.xlsx", index=False)
Python深掘りポイント
勤務時間は「退勤 − 出勤」で計算できます。 dt.total_seconds() / 3600 を使うことで「時間」に変換できます。 休憩時間を引くことで「実働時間」が求まります。
残業時間を自動計算する(実務で必須)
所定労働時間(例:8時間)を超えた分を計算
df["残業時間"] = df["実働時間"] - 8
df["残業時間"] = df["残業時間"].apply(lambda x: x if x > 0 else 0)
Python深掘りポイント
残業は「実働時間 − 所定労働時間」で計算できます。 マイナスは残業ではないので 0 にします。
社員別に月次勤怠を集計する(給与計算に必須)
氏名ごとに実働時間・残業時間を集計
summary = df.groupby("氏名")[["実働時間", "残業時間"]].sum()
summary.to_excel("kintai_summary.xlsx")
Python深掘りポイント
groupby("氏名") によって社員別の集計が一瞬でできます。 給与計算に必要な「月次の総実働時間・総残業時間」が自動で出ます。
月別勤怠集計(複数月の勤怠を扱う場合)
日付から月を抽出して集計
df["日付"] = pd.to_datetime(df["日付"])
df["月"] = df["日付"].dt.to_period("M")
summary_month = df.groupby(["氏名", "月"])[["実働時間", "残業時間"]].sum()
summary_month.to_excel("kintai_monthly.xlsx")
Python深掘りポイント
dt.to_period("M") を使うことで「2026-06」のような月単位に変換できます。 複数月の勤怠を扱う場合は必須のテクニックです。
勤怠エラーを自動検出する(品質向上に必須)
出勤・退勤の未入力を検出する例
errors = df[df["出勤"].isna() | df["退勤"].isna()]
errors.to_excel("kintai_error.xlsx", index=False)
Python深掘りポイント
勤怠は入力ミスが非常に多い領域です。 未入力を自動検出することで、修正作業が圧倒的に楽になります。
勤怠集計を「見やすいExcel」に整形する
集計結果を複数シートにまとめる例
with pd.ExcelWriter("kintai_report.xlsx") as writer:
df.to_excel(writer, sheet_name="元データ", index=False)
summary.to_excel(writer, sheet_name="社員別集計")
summary_month.to_excel(writer, sheet_name="月別集計")
Python深掘りポイント
勤怠レポートは複数シートにまとめると見やすくなります。 提出用の勤怠レポートとしてそのまま使えます。
勤怠集計+グラフ自動生成(レポートとして完成)
月別実働時間の折れ線グラフを作成する例
from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference
summary_month.to_excel("summary_month.xlsx")
wb = load_workbook("summary_month.xlsx")
ws = wb.active
chart = LineChart()
chart.title = "月別実働時間推移"
values = Reference(ws, min_col=3, min_row=2, max_row=1 + len(summary_month))
labels = Reference(ws, min_col=2, min_row=2, max_row=1 + len(summary_month))
chart.add_data(values, titles_from_data=False)
chart.set_categories(labels)
ws.add_chart(chart, "E2")
wb.save("summary_month_chart.xlsx")
Python深掘りポイント
勤怠は「推移」が重要です。 折れ線グラフを使うことで、 働き方の変化を視覚的に理解できます。
勤怠集計を業務で設計するときの視点
日付・時刻を必ず datetime に変換する
勤怠計算の基盤になります。
実働時間 → 残業時間の順で計算する
計算ロジックがシンプルになります。
社員別・月別の集計を作る
給与計算に必須です。
エラー検出を必ず入れる
勤怠は入力ミスが多いため、品質向上に直結します。
