勤怠集計をGASで自動化する5ステップ|月初2日を解消|給与ソフト連携まで
月末になると、タイムカードを全員分Excelに打ち直して、深夜残業と休日出勤を区分けして、部署別に集計して…毎月この作業に丸2日かかってます。経理の月初業務は、いつもこの転記から始まります。
勤怠集計の手作業を、Google Apps Script(GAS)で月次CSV出力まで自動化する手順を解説します。スプレッドシートに打刻データを集め、勤務時間・残業時間・休日出勤を自動算出し、給与計算ソフトに取り込めるCSV形式で月初に自動出力するまでの実装フローを、つまずきやすい落とし穴と合わせて整理します。
目次
勤怠集計が「人がやらなくていい仕事」になっている現場
月末月初の経理・人事担当者が抱える勤怠集計業務は、ほぼ毎社で同じ構造をしています。タイムカードや打刻アプリから出力されたデータを、所定の様式に転記し、深夜・休日の区分を手で振り分け、部署ごとに合計し、給与計算ソフトに取り込める形に整える、という流れです。
吉元は生成AI伴走顧問として中小企業のAI導入を支援する中で、残業の原因は「人がやらなくていい仕事を人がやっていること」にあると指摘しています。勤怠集計はまさにその典型で、計算ロジックが決まっていて、人の判断要素がほぼなく、それでいて毎月必ず発生する。自動化との相性が極めて高い領域です。
手作業で残ってしまう3つの理由
それでも手作業が残るのは、技術的な難しさより運用上の理由が大きいです。打刻ツールのCSV形式が部署ごとにバラバラ、残業時間の社内ルールが複雑(みなし残業・固定残業・36協定の上限管理)、給与ソフトに取り込む様式が独特、といった「自社固有の事情」が、市販ツールでカバーしきれない領域として残ります。
この自社固有の集計ロジックを、スプレッドシートとGASで内製できれば、月15〜25時間の作業時間が現実的に削減できる範囲に入ります。複数の支援先企業で確認されている、現実的な削減幅です。
GASで勤怠集計を自動化する全体像と削減効果
勤怠GAS自動化の全体像は、入力(打刻データ)→処理(GASで計算)→出力(月次CSV)の3層に分けて設計します。打刻データはスプレッドシートに集約し、GASがトリガーで自動起動して所定時間・残業時間・休日出勤を算出、月次でCSVを生成してDriveに保存、または給与ソフト連携用フォルダへ自動配置する、という流れです。
3層に分ける設計のメリット
入力・処理・出力を分離することで、打刻ツールを変更しても入力層の変換だけで済み、給与計算ソフトを乗り換えても出力層のCSVテンプレを差し替えるだけで対応できます。社内ルールが変わったときも、処理層のスクリプトを書き換えれば全社一斉に反映されます。
削減効果の現実的なレンジ
支援実績では、5業務合計で月33時間→月13時間(20時間削減)に短縮された例があります。勤怠集計単体でも、50人規模の企業で月8〜12時間程度の削減が一般的なレンジです。残業代計算ミスによる遡及修正がなくなる点も、見えにくいけれど大きな効果です。
勤怠GAS自動化の実装手順5ステップ
スプレッドシート+GASで勤怠集計を自動化する標準的な実装手順を、5ステップで整理します。最小構成で動く順番にしているので、上から順番に組めば動作確認まで進めます。

ステップ1:打刻データの取り込み層を作る
打刻ツールのCSVをスプレッドシートに取り込むシート(例:「打刻ログ」)を作成し、列は「社員ID/日付/出勤時刻/退勤時刻/休憩分/打刻方法」の6列に統一します。打刻ツールが複数ある場合は、ツールごとに変換スクリプトを書いてこの統一フォーマットに揃えます。元データはあとで照合できるよう、別シートに原本を残します。
ステップ2:勤務時間・残業時間の計算ロジックを書く
GASエディタを開き、出退勤時刻から所定内勤務時間・所定外残業・深夜残業(22時〜5時)・法定休日労働を分けて算出する関数を書きます。この計算は社内ルールに依存するので、就業規則をそのまま条件分岐に落とすのが肝心です。みなし残業がある場合は、固定分を超えた時間だけを支給対象として別列に出します。
ステップ3:部署別・社員別の集計シートを生成する
月単位で社員別に勤務時間を合計するシートと、部署別に集計するピボット相当のシートを自動生成します。GASのSpreadsheetApp.getActiveSpreadsheet().insertSheet()でその月のシートを動的に作り、関数の結果を書き込んでいく形です。前月分は自動でアーカイブされ、今月分が常に見える位置にある状態を保ちます。
ステップ4:CSVエクスポート関数を書く
給与計算ソフトの取り込み様式に合わせて、CSVを生成する関数を書きます。文字コード(Shift_JISかUTF-8 BOM付きか)、区切り文字、ヘッダ行の有無、日付形式など、給与ソフト側の仕様に厳密に合わせます。生成したCSVはDriveApp.createFile()で指定フォルダに保存します。
ステップ5:時間トリガーで月初0時に自動実行する
GASの「トリガー」設定で、毎月1日0時に集計&CSV出力関数を自動実行するよう設定します。実行ログはスプレッドシートの「実行履歴」シートに自動追記し、エラー発生時は管理者にメール通知される設定にしておきます。これで月初に出社したら、CSVがDriveに揃っている状態が作れます。
月次CSV出力までの自動フロー設計
5ステップで個別の関数が動くようになったら、月次の自動フローとして1本化します。実行順は「打刻データ取り込み→勤務時間計算→集計シート生成→CSV出力→Slack/メール通知」が標準形です。各処理の間で例外が起きたら、そこで止めて担当者にアラートを飛ばす設計にします。
月次フローの実行スケジュール例
毎月末23時に「打刻データの取り込みと整形」、月初0時5分に「勤務時間・残業時間の計算」、0時15分に「部署別集計とCSV出力」、0時20分に「完了Slack通知」と段階的にトリガーを分けます。一度に全処理を回すと後述する6分制限に引っかかるため、処理を分割して各処理を5分以内に収めます。
給与計算ソフトへの取り込みまで自動化する
給与計算ソフトがAPI連携に対応しているなら、CSVを保存するだけでなく直接データ送信まで自動化できます。API非対応のソフトでも、Driveの特定フォルダに保存→ローカルPCの自動同期→給与ソフトのインポート機能、までを動線化できれば、担当者の作業はインポートボタンのクリック1回で済みます。
36協定上限の自動チェックを組み込む
同じスクリプトの中で、社員ごとの月間残業時間が36協定の上限(原則45時間/繁忙期60時間など)に近づいたら、本人と部門長と人事に自動で警告メールを送る仕組みを足せます。集計と警告を同じスクリプトで回せるのは、内製した自動化の大きな利点です。
GAS自動化でつまずく3つの落とし穴と回避策
勤怠GAS自動化のプロジェクトでよく止まる原因は、技術的な難しさより運用設計の甘さにあります。実際の支援現場で見てきた、データ形式バラバラ・GAS6分制限・エラー通知未設定の3つを順に取り上げます。
落とし穴1:打刻データの形式がバラバラで動作不能
部署ごとに違う打刻ツールを使っていて、CSVの列順や日付形式(2026/04/29、2026-04-29、令和8年4月29日など)が揃っていないと、計算ロジックが軒並み壊れます。回避策はステップ1で書いた通り、「打刻ログ」シートに6列の統一フォーマットを定義し、ツール別の変換スクリプトを薄く挟むことです。元データを残すルールも合わせて決めておきます。
落とし穴2:GASの6分実行制限に引っかかる
GASは1回の実行が6分(無料枠)または30分(有料枠)で強制停止されます。社員数が増えてくると、1ヶ月分の計算と集計を一気にやろうとするとタイムアウトします。回避策は処理を細かく分けて時間トリガーで段階実行すること、およびバッチサイズを小さくしてSpreadsheetApp.flush()でこまめに書き込むことです。100名規模を超えると、Cloud FunctionsやBigQueryへの移行も視野に入ります。
落とし穴3:エラー通知未設定で「壊れたまま動いている」
最も怖いのは、トリガーが動いていてもエラーが起きていて、担当者が気づかないまま月初を迎えるケースです。回避策はtry / catchでエラーを捕捉し、Slack Webhookまたは管理者メールに「どのステップで何が起きたか」を即時通知する仕組みを必ず組み込むこと。実行ログをシートに追記し、月初に「正常完了」が記録されているか目視確認する運用も合わせます。
よくある質問
Q市販の勤怠管理SaaSではなくGASで自作するメリットは何ですか
A就業規則の複雑なルール(みなし残業・固定残業・部門別の所定労働時間など)や、給与計算ソフト固有のCSV様式に、SaaSの設定機能だけでは対応しきれない場合が多いためです。GASで自作すれば自社の運用にぴったり合わせられ、運用変更にも自社で対応できます。SaaSと組み合わせ、SaaSが苦手な部分だけGASで補完する設計も有効です。
QGASの知識がない経理担当者でも自分で運用できますか
A初期構築はエンジニアまたは外部支援が必要ですが、構築後の運用は経理担当者でも回せる設計が可能です。スプレッドシートのボタンを押すだけ、または毎月1日に自動実行されるだけ、という状態にしておけばコードを触る必要はありません。就業規則の変更時など、ロジックの調整が必要なタイミングだけ依頼する運用が現実的です。
Q社員数が増えてきたらGASでは限界がありますか
A目安として100名を超えると、GASの6分制限と動作速度がボトルネックになり始めます。処理の分割と時間トリガーの段階実行で200〜300名程度までは引っ張れますが、それ以上の規模では、Cloud FunctionsやBigQueryへの移行、または専用の勤怠SaaSへの切り替えを検討する段階です。GAS時代に積み上げた集計ロジックは、移行先でも資産として活用できます。
まとめ
- 勤怠集計は計算ロジックが決まっていて毎月必ず発生する典型的な「人がやらなくていい仕事」で、自動化との相性が極めて高い領域です
- スプレッドシート+GASの構成は、入力(打刻データ)/処理(計算)/出力(CSV)の3層に分けて設計すると、ツールやソフトの変更にも強くなります
- 実装は「打刻取り込み→残業計算→集計シート生成→CSV出力→月初0時の自動実行」の5ステップで構築でき、月初に出社したらCSVが揃っている状態が作れます
- つまずきやすいのはデータ形式バラバラ・GAS6分制限・エラー通知未設定の3点で、統一フォーマット・処理分割・try/catch通知の3対策で回避できます
- 月15〜25時間の削減が現実的なレンジで、36協定の上限管理まで同じスクリプトで自動化できる点は、内製化した自動化の大きな利点です