当サイトではアフィリエイトプログラムを利用して商品を紹介しています。掲載リンクからご購入いただいた場合、当サイトに報酬が発生することがあります。

勤怠チェックを自動化する|締めの前に7項目を機械で当て、人は例外だけを見る。打刻修正の履歴と保存期間の線引きまで

毎月の締めの前に、人事や総務の担当者が勤怠データを上から順に見ていく時間があります。打刻が片方しかない日を探し、休憩が入っていない長時間の勤務を探し、残業が多い人を探す。50人の会社でも半日、100人を超えると丸1日かかることも珍しくありません。

この点検は、そのほとんどが「条件に当てはまる行を見つける」作業です。つまり機械に渡せます。ただし勤怠は、労働基準法と労働安全衛生法が直接かかる領域です。機械に見つけさせてよいのは異常の候補までで、打刻を書き換えてよいかどうかは別の話になります。この記事では、その線引きを含めて、点検の自動化を設計図から順に説明します。

この記事でわかること

  • 締めの前の勤怠点検を、7つのルールで機械に当てさせ、人は例外だけを見る仕組み。スプレッドシートとApps Scriptで動き、既存の勤怠システムを替える必要はない
  • 打刻の修正をめぐる線引き。機械が書き換えてよいもの、本人の申告が要るもの、承認の履歴を残すべきものの区別
  • 自動化しても外せない、労働時間の把握方法・記録の保存期間・時間外労働の上限という法令上の要件

ムダの現状:締めの前に、全員ぶんを目で追っている

勤怠の締め処理は、打刻を集めて給与計算に渡すまでの一連の作業です。このうち時間を食っているのは集計そのものではなく、集計の前に行う点検のほうです。

点検で探しているものは、だいたい決まっています。出勤の打刻はあるが退勤の打刻がない日。退勤だけあって出勤がない日。休憩が記録されていないのに長時間になっている日。深夜の時間帯にかかっている勤務。所定の休日に働いた記録。残業が今月すでに多い人。有給休暇の申請と実際の打刻が食い違っている日。

どれも「条件に当てはまる行を探す」作業です。人がやると、目が滑って見落とすうえ、人数が増えるほど時間が線形に伸びます。

機械に渡せる部分と、人に残す部分

勤怠の点検を分解すると、次のように分かれます。

工程 中身 誰がやるか
異常の検出 条件に当てはまる行を全件から拾う 機械
原因の確認 本人に何があったかを聞く 人。本人と上長
打刻の修正 申告に基づいて記録を直す 人。履歴を残す
集計 日数・時間を足す 機械
締めの承認 内容を確認して確定する 人。責任者

ここで押さえておきたいのは、打刻の修正を機械に任せないことです。打刻漏れを機械が「たぶん定時だろう」と埋めてしまうと、実際の労働時間と記録が食い違います。機械がやるのは、埋めるべき行を見つけて一覧に出すところまでです。

スキームの全体図:点検は機械、判断と修正は人

全体は4つの層に分かれます。

1. 打刻データの取り込み 勤怠システムからCSV、または直接参照 2. 点検ルールを全件に当てる 打刻漏れ・休憩なし・深夜・休日出勤 上限への接近・申請との食い違い 機械。毎日または締め前に自動で走らせる 3. 例外リストを人が見る 全件ではなく、当てはまった行だけ 本人に確認し、上長が承認する 4. 修正と確定 誰が・いつ・何を直したかを記録に残す 人。ここを機械に渡さない 法令が直接かかる3点 ・労働時間の状況は客観的な方法で把握する ・把握した記録は3年間保存する ・賃金台帳などの重要書類は5年間保存する 出典: 労働安全衛生法・同規則、労働基準法

2番目の層が、この記事でいちばん手を動かす部分です。3番目と4番目は人の仕事として残し、機械に渡しません。

必要なツールと費用(2026年9月22日時点)

既存の勤怠システムを入れ替える必要はありません。点検の層だけを外側に足します。

必要なもの 用途 費用
スプレッドシート 打刻の受け皿と点検結果の出力先 既存の契約の範囲で足りる
Apps Script 点検ルールの実行と定時起動 追加費用なし
勤怠データの出力 CSV書き出し、またはAPI 利用中のシステムの機能を確認する
就業規則の確認 所定労働時間・休憩・休日の定義 0円。読む時間が半日

生成AIはこの仕組みの必須要素ではありません。点検は条件がはっきりしているため、ルールで書けます。AIを足すとすれば、例外リストに出た行の傾向を要約させる用途ですが、それは仕組みが回り始めた後の話です。

導入手順:点検ルールを7項目から始める

Step 1:就業規則から、判定の基準値を書き出す

点検ルールを書く前に、自社の基準値を確定させます。所定労働時間は1日何時間か。休憩は何時間を超えたら何分必要か。所定休日はどの曜日か。深夜の割増はいつからいつまでか。36協定で定めた上限は月何時間か。

ここを曖昧にしたまま数式を書くと、あとで全件をやり直すことになります。就業規則と36協定の写しを開いて、次の表に転記してください。この表が、以降のすべての判定の元になります。

項目 どこに書いてあるか 記入例
所定労働時間 就業規則の労働時間の条 1日8時間
休憩の付与条件 就業規則の休憩の条 6時間超で45分、8時間超で60分
所定休日 就業規則の休日の条 土曜・日曜・年末年始
深夜の時間帯 就業規則の割増賃金の条 22時から翌5時
時間外の上限 36協定の届出の写し 月30時間・年250時間
締めの日 給与規程 毎月20日

記入例の欄をそのまま使わないでください。休憩の付与条件や深夜の時間帯は会社によって違います。特に36協定の上限は、法律の数字ではなく自社が届け出た数字を書きます。ここを取り違えると、点検が通っているのに協定に違反している状態が起きます。

Step 2:点検の7項目を決める

最初に入れる点検は7つで十分です。多く入れるほど例外リストが膨れ、結局は目で追うことになります。

点検項目 判定の条件 重さ
打刻漏れ 出勤か退勤の片方が空 高
休憩の未取得 拘束が6時間超で休憩が0分 高
前後の逆転 退勤が出勤より前 高
上限への接近 当月の時間外が基準値の8割超 高
休日の勤務 所定休日に打刻がある 中
深夜の勤務 22時以降の打刻がある 中
申請との不一致 休暇の申請日に打刻がある 中

「重さ」の列は、締めの前に必ず解消すべきものを高、状況を把握しておくものを中として分けています。運用が始まると高だけを先に片づける形になるので、最初から分けておくと回しやすくなります。

Step 3:点検を書く

次のApps Scriptは、打刻シートを1行ずつ見て、当てはまった点検項目を結果シートに書き出します。打刻そのものは一切変更しません。

var HOLIDAYS = ['土', '日'];
var BREAK_NEEDED_MIN = 360;
var OT_LIMIT_MIN = 45 * 60;
var NIGHT_START = 22;
function checkAttendance() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var rows = ss.getSheetByName('打刻').getDataRange().getValues().slice(1);
  var leave = leaveMap(ss);
  var otSum = {};
  var out = [];
  for (var i = 0; i < rows.length; i++) {
    var r = rows[i];
    var id = r[0], name = r[1], date = r[2];
    var inT = r[3], outT = r[4], brk = Number(r[5] || 0), ot = Number(r[6] || 0);
    otSum[id] = (otSum[id] || 0) + ot;
    var hits = [];
    if (!inT || !outT) {
      hits.push('打刻漏れ');
    } else {
      var span = (outT - inT) / 60000;
      if (span < 0) hits.push('前後の逆転');
      if (span >= BREAK_NEEDED_MIN) {
        if (brk === 0) hits.push('休憩の未取得');
      }
      if (outT.getHours() >= NIGHT_START) hits.push('深夜の勤務');
      if (HOLIDAYS.indexOf(weekday(date)) >= 0) hits.push('休日の勤務');
    }
    if (leave[key(id, date)]) {
      if (inT) hits.push('申請との不一致');
    }
    if (otSum[id] > OT_LIMIT_MIN * 0.8) hits.push('上限への接近');
    for (var j = 0; j < hits.length; j++) {
      out.push([id, name, date, hits[j], '', '', '']);
    }
  }
  writeResult(ss, out);
}
function weekday(d) {
  return ['日', '月', '火', '水', '木', '金', '土'][new Date(d).getDay()];
}
function key(id, date) {
  return id + '_' + Utilities.formatDate(new Date(date), 'JST', 'yyyyMMdd');
}
function leaveMap(ss) {
  var m = {};
  var sh = ss.getSheetByName('休暇申請');
  if (!sh) return m;
  var v = sh.getDataRange().getValues().slice(1);
  for (var i = 0; i < v.length; i++) {
    m[key(v[i][0], v[i][1])] = true;
  }
  return m;
}
function writeResult(ss, out) {
  var sh = ss.getSheetByName('点検結果');
  sh.getRange(2, 1, Math.max(sh.getLastRow() - 1, 1), 7).clearContent();
  if (out.length === 0) return;
  sh.getRange(2, 1, out.length, 7).setValues(out);
}

結果シートの列は、社員番号、氏名、日付、点検項目、本人の回答、対応、承認者の7つにしています。後ろの3列を空で出すのは、そこが人の作業だからです。この3列が埋まって初めて、その行は解消したことになります。

条件の書き方で1点だけ補足します。休憩の判定で拘束時間と休憩を同時に見るときは、条件を入れ子にして書いています。1行に詰め込むより、あとで条件を足すときに読みやすくなります。

打刻シートの列を先に固定する

上のコードは、打刻シートが次の順で並んでいる前提で書かれています。勤怠システムからの書き出しが別の順序なら、シート側を並べ替えるか、コードの添え字を書き換えてください。列の順序を固定してから書くのが、後からの手戻りを防ぐ要点です。

列 中身 形式
A 社員番号 文字列。先頭の0が消えない設定に
B 氏名 文字列
C 日付 日付型
D・E 出勤・退勤の時刻 日時型。空欄を許容する
F 休憩の分数 数値
G その日の時間外の分数 数値

日付と時刻を文字列のまま取り込むと、比較が正しく動きません。CSVを貼り付けた直後に、C列を日付、D列とE列を日時に変換しておいてください。ここでつまずく例が多いので、最初に10行だけで試して、意図した型になっているかを確かめてから全件に広げます。

もうひとつ、社員番号は文字列として扱います。数値として取り込むと先頭の0が落ち、休暇申請シートとの突き合わせが外れます。列の書式をあらかじめ文字列にしておくのが確実です。

Step 4:毎日走らせる

この点検は、締めの前にまとめて走らせるより、毎日走らせるほうが効きます。打刻漏れは当日か翌日なら本人が覚えていますが、3週間前のことは思い出せません。

Apps Scriptのトリガーで、平日の朝8時に前日ぶんを点検する設定にします。結果シートに新しい行が出たら、担当者が本人に確認する。この形にすると、締めの日に残っている例外が大幅に減ります。

上限への接近だけは、月の途中で分かることに意味があります。月末に「45時間を超えていました」と分かっても手の打ちようがありません。8割を超えた時点で拾えば、まだ業務の配分を変えられます。

Step 5:例外リストの回し方を決める

仕組みができても、例外リストが誰のものかを決めていないと放置されます。次の3点を先に決めてください。

1つ目、誰が本人に確認するか。人事が全員に聞くのか、各部署の管理職が自部署ぶんを見るのか。人数が50人を超えるなら、管理職に配るほうが回ります。2つ目、いつまでに解消するか。締めの何営業日前までに全ての高を消すかを決めます。3つ目、解消しなかった行をどうするか。締めを止めるのか、注記をつけて進めるのか。ここを決めていないと、毎月同じ議論になります。

運用に乗せるときは、結果シートをそのまま見せるより、部署ごとに絞った表示を用意するほうが実務に合います。管理職が自部署の行だけを見られるようにしておくと、他部署の情報に触れずに済み、確認の心理的な負担も下がります。フィルタ表示を部署ごとに作っておくだけで足りるので、凝った仕組みは要りません。

最初の1か月は、手作業と並走させる

いきなり点検を機械に任せきりにせず、最初の1か月は従来どおりの目視も続けてください。狙いは2つあります。ひとつは、機械が拾えていない異常がないかを確かめること。もうひとつは、機械が拾ったが実際には問題ではない行、つまり空振りの多さを把握することです。

空振りが多い項目は、基準値が実態と合っていません。たとえば深夜の勤務が毎日大量に出るなら、その部署の所定の勤務時間帯が想定と違う可能性があります。並走の1か月で基準値を調整してから、目視をやめる判断をしてください。

現場の合意の取り方:管理職と従業員で反対の中身が違う

勤怠の点検を機械に任せると言うと、二方向から反応が返ってきます。中身が違うので、答えも分けて用意します。

誰から 反対の中身 答え方
従業員 監視されている感じがする 見るのは打刻の記録だけで、業務の中身は見ないと明示する。点検項目を全員に開示する
従業員 残業を申請しにくくなる 検出は上限管理のためで、申告を減らす目的ではないと伝える。未払いを防ぐ側の仕組みだと説明する
管理職 部下の残業を指摘される 8割の時点で拾うのは、締め後に責めるためではなく月内に配分を変えるためだと示す
管理職 確認の作業が増える 毎日走らせると1日あたり数件になる。締めの日にまとめて来るより総量は減ると数字で示す

説明する順番

先に管理職へ、次に全員へ、という順にします。管理職が内容を知らないまま全体説明を聞くと、質問が来たときに答えられず、結果として消極的な立場に回ります。

管理職への説明では、例外リストが自分の評価に使われるものではないことを最初に言ってください。ここを明言しないと、管理職が部下に「打刻を丁寧に」と伝えるのではなく「例外に出ないように」と伝える方向に働きます。それは実態の隠蔽につながり、仕組みの目的と逆になります。

全体説明では、この仕組みで何が起きなくなるかを先に伝えます。締めの直前に「先月のこの日、何時に帰りましたか」と聞かれることがなくなる。打刻漏れが給与に反映されないまま確定することがなくなる。この2つは従業員にとっての利点なので、負担の話より先に置きます。

そして点検項目は全員に開示してください。何を見ているかを隠すと、監視だという受け取られ方が強くなります。7項目を配り、これ以外は見ないと明示するほうが、はるかに合意が取りやすくなります。

失敗パターンと限界:把握の方法・保存期間・上限規制

勤怠は法令が直接かかる領域です。自動化の設計でここを外すと、効率化の前に問題が起きます。

労働時間の把握は、客観的な方法で行う

労働安全衛生法第66条の8の3は、事業者に対し、厚生労働省令で定める方法により労働者の労働時間の状況を把握しなければならないと定めています。その方法は労働安全衛生規則第52条の7の3で、タイムカードによる記録、パソコン等の電子計算機の使用時間の記録等の客観的な方法その他の適切な方法とされています。

つまり、自己申告だけに寄せる設計は原則から外れます。点検の仕組みを作るときも、元になるデータは客観的な記録であることが前提です。点検で見つけた打刻漏れを本人の申告で埋める場合も、申告があったという事実と、誰が承認したかを残してください。

実務では、修正の履歴を残す列を最初から用意しておくのが確実です。元の値、修正後の値、申告の内容、承認者、修正した日時の5つを、打刻シートとは別のシートに追記していきます。上書きだけして履歴が残らない形にすると、後から経緯を説明できません。記録は上書きせず、積み上げるという原則で設計してください。

記録の保存期間は、種類によって違う

同じ規則の第2項は、把握した労働時間の状況の記録を作成し、3年間保存するための必要な措置を講じなければならないと定めています。一方、労働基準法第109条は、労働者名簿、賃金台帳、その他労働関係に関する重要な書類を5年間保存しなければならないとしています。

スプレッドシートで点検の仕組みを作ると、古いシートを整理したくなります。保存期間の起算と年数を確認してから消してください。点検結果そのものの位置づけは自社で判断が要るところなので、迷うなら残す側に倒すのが安全です。

時間外労働の上限は、協定の内容で決まる

労働基準法第36条は、時間外労働の限度時間を1か月45時間、1年360時間と定めています。臨時的な特別の事情がある場合に協定で定められる時間にも枠があり、1か月については休日労働を含めて100時間未満、1年については720時間を超えない範囲とされています。さらに、休日労働を含めた複数月の平均が80時間を超えないことも求められます。

点検ルールに入れる基準値は、法律の上限そのものではなく自社の36協定で定めた時間にしてください。協定で月30時間としているなら、その8割で拾うのが正しい設定です。法律の45時間を基準にすると、協定違反を見逃します。

もうひとつ、複数月の平均という要件は1か月ぶんのデータだけでは判定できません。前月までの実績を持っておく必要があります。点検シートとは別に、社員ごと・月ごとの時間外の実績を1行ずつ積む表を用意し、毎月の締め後に1行足す形にしてください。この表があれば、平均の判定も、年間の累計も同じ場所から出せます。

なお、年の上限は協定の対象期間で見ます。会計年度と一致しているとは限らないので、Step 1の表に「対象期間の起算月」も書き加えておくと、年間の累計を数えるときに迷いません。

この仕組みが向かない場合

打刻そのものが紙のタイムカードで、電子データになっていない場合は、点検の自動化より先に打刻の電子化が課題になります。手で入力し直してから点検しても、入力の手間が点検の手間に置き換わるだけです。

また、変形労働時間制やフレックスタイム制を採っている場合、1日単位の判定がそのままでは当てはまりません。清算期間で見る項目と日単位で見る項目を分ける必要があるため、就業規則の確認により時間がかかります。この場合も、打刻漏れと前後の逆転の2項目だけなら制度によらず使えるので、そこから始めるのが現実的です。

効果の測り方

測る数字は3つです。

数字 測り方 いつ見るか
点検にかけた時間 締め前2日間の作業時間を記録する 毎月の締め後
締め日に残った例外 重さが高の未解消件数を数える 毎月の締め日
締め後の修正 確定後に直した件数を数える 毎月

3つ目の締め後の修正がいちばん重要です。点検が効いていれば、締めた後に直す件数は減ります。ここが減らないまま点検の時間だけが短くなっている場合、見るべき項目が抜けている可能性があります。

導入前の状態を記録していないと比較できないので、仕組みを作る前の1か月ぶんは手作業のまま計測してください。1か月分の記録を取ってから切り替えると、効果を説明する材料になります。

まとめ

勤怠の締め前の点検は、条件に当てはまる行を探す作業なので機械に渡せます。ただし渡すのは検出までで、原因の確認、打刻の修正、締めの承認は人に残します。

点検は7項目から始めます。打刻漏れ、休憩の未取得、前後の逆転、上限への接近を重さ高とし、休日の勤務、深夜の勤務、申請との不一致を中とする。基準値は法律の数字ではなく自社の36協定と就業規則から取ります。毎日走らせて、当日か翌日に本人へ確認する形にすると、締めの日に残る例外が減ります。

法令の線は3つ。労働時間の状況は客観的な方法で把握すること、その記録は3年間保存すること、賃金台帳などの重要書類は5年間保存すること。点検項目は全員に開示し、これ以外は見ないと明示する。ここまで揃えると、監視ではなく未払いを防ぐ仕組みとして受け取られるようになります。

よくある質問

勤怠システムに点検機能がある場合、この仕組みは不要ですか

システムの機能で足りるなら、そちらを使ってください。確認する点は、自社の36協定の時間を基準値に設定できるか、点検項目を追加できるか、結果を一覧で出力できるかの3つです。標準の項目しか見られない場合に、この仕組みを外側に足す形になります。

打刻漏れを機械で自動的に埋めてはいけませんか

避けてください。実際に働いた時間と記録が食い違う原因になります。労働時間の状況は客観的な方法で把握することが求められており、機械が推測で埋めた値はその要件から外れます。本人の申告と承認の履歴を残す形にしてください。

点検項目を増やしたくなったら、どうすればよいですか

1か月に1項目ずつ足してください。一度に増やすと例外リストが膨れ、結局は全件を目で追う状態に戻ります。追加する前に、いまの7項目のうち検出がほぼ0の項目があれば、基準値が実態と合っているかを確認してください。

変形労働時間制でも使えますか

打刻漏れと前後の逆転の2項目は制度によらず使えます。休憩や時間外の判定は清算期間や対象期間の定義に依存するため、就業規則と協定を確認したうえで条件を書き直す必要があります。まず2項目で回して、残りは後から足す順番を勧めます。

従業員から監視だと言われたら、どう答えますか

点検項目の一覧を見せてください。見ているのは打刻の記録だけで、業務の中身は見ていないことが一覧から分かります。あわせて、上限への接近を月の途中で拾う目的が、締め後に責めることではなく月内に配分を変えることだと説明してください。

人数が少ない会社でも意味がありますか

20人に満たないなら、点検の自動化より、打刻漏れが起きにくい運用を作るほうが効きます。ただし打刻漏れと前後の逆転だけなら数式でも書けるので、そこだけ入れておくと締めが楽になります。人数が増えて点検に半日かかるようになった時点で、7項目に広げてください。

部門ごとの自動化スキームを、1つずつ

営業・経理・人事総務・サポート・現場。部門ごとに、1つのムダを消す設計図と、現場の合意の取り方を書いています。

スキーム一覧を見る

同じ部門の記事だけを追うなら、人事・総務・労務の記事一覧からたどれます。

上部へスクロール