こんにちは、コウイチです。
経理の仕事に戻ってから毎月必ず触るのが、勤怠データと支払期日の管理です。どちらも「日付」と「時間」のかたまり。ところがこの2つ、Excelでは普通の数字のつもりで扱うと、いきなり「0:00」になったり、マイナスになったり、2月だけ期日がずれたりと、地味に罠だらけなんです。
今回は、実際に私が勤怠集計や支払管理でつまずいた(あるいは、つまずきかけた)ポイントを6つに絞って、原因と対策をまとめました。
本題の前に、1冊だけ紹介させてください。日付・時刻の関数をもっと体系的に押さえたい方には、『Excel関数+組み合わせ術[実践ビジネス入門講座]【完全版】第3版』(SBクリエイティブ)が手元に置いておくと便利です。仕事で使う関数に絞って解説していて、「日付・時刻の計算」の章もあります。XLOOKUPやGROUPBYなどの新しい関数を含めてExcel 2024まで対応し、サンプルデータもダウンロードできるので、この記事の内容と合わせて手を動かしながら復習できますよ。
まず知っておきたい「日付と時間の正体」
🙋 生徒:そもそも、Excelの日付ってただの文字じゃないんですか?
🧑🏫 コーチ:実は中身は「数字」なんです。1900年1月1日を「1」として、1日ごとに1ずつ増えるシリアル値で管理されています。たとえば2026年10月31日は「46326」です。
🙋 生徒:じゃあ時間は?
🧑🏫 コーチ:時間は「1日=1」の小数です。12:00なら0.5、6:00なら0.25。ここを押さえておくと、この後の落とし穴がほぼ全部説明できますよ。
この記事では、次の統一サンプルデータを使って解説します。
| A:日付 | B:出勤 | C:退勤 | D:休憩 | E:実働 | |
|---|---|---|---|---|---|
| 2 | 2026/10/1 | 9:00 | 18:00 | 1:00 | 8:00 |
| 3 | 2026/10/2 | 9:00 | 20:30 | 1:00 | 10:30 |
| 4 | 2026/10/3 | 22:00 | 5:00 | 1:00 | ? |
落とし穴1:CSVの日付が「文字列」で計算できない
勤怠システムや会計ソフトから出力したCSVを開くと、見た目は日付なのに計算するとエラー(#VALUE!)になることがあります。これは日付が文字列として読み込まれているのが原因です。
見分け方は簡単で、セルが左寄せなら文字列、右寄せならシリアル値の可能性が高いです。=ISNUMBER(A2)で確認すると確実です。
=DATEVALUE(A2) ← "2026/10/01"のような文字列を日付に変換 =--A2 ← 同じ効果の短縮形(表示形式は日付に)
落とし穴2:24時間を超えた合計が「0:00」に戻る
月の実働時間をSUMで合計したら、160時間あるはずが「16:00」と表示された──勤怠集計で一番よく見る事故です。
計算自体は合っています。問題は表示形式で、標準の「h:mm」は24時間で1周してしまうため、日数分が見えなくなっているだけです。
表示形式(ユーザー定義): [h]:mm → 160:00 と正しく表示される
落とし穴3:日をまたぐ深夜勤務でマイナスになる
サンプルの3行目(22:00出勤→翌5:00退勤)で、=C4-B4-D4と単純に引くと、5:00−22:00はマイナスになり「#######」と表示されます。退勤のほうが数字として小さいからです。
=MOD(C4-B4,1)-D4 → 7:00 −1:00 = 6:00
🙋 生徒:MODって割り算の余りですよね?なんでこれで直るんですか?
🧑🏫 コーチ:マイナスの時間を「1(=1日)」で割った余りにすると、自動的に1日分を足した値になるんです。日をまたがない行に使っても結果は変わらないので、全行に同じ式を入れておけば安心ですよ。
落とし穴4:時間×時給の計算が24分の1になる
実働8:00、時給1,200円で=E2*1200とすると、結果は9,600円ではなく400円。8:00の中身は0.333…なので当然です。
=E2*24*1200 ← 24を掛けて「時間数」に直す =ROUND(E2*24,2) ← 時間数を小数で出す場合は丸めておく(8.00)
さらに厄介なのが浮動小数点の誤差です。時刻を足し引きした結果は、見た目が「8:00」でも内部的に8時間ぴったりではないことがあり、=E2*24=8がFALSEになるケースがあります。条件判定や端数処理の前には、ROUNDで丸めるクセをつけましょう。
残業時間を出すときの書き方
実働から所定の8時間を引いて残業時間を出す場合、=E3-"8:00"と書くと、文字列の”8:00″が自動変換されて一応計算はできます。ただし、実働が8時間未満の日はマイナスになり、表示が崩れます。
=MAX(E3-TIME(8,0,0),0) → 10:30 − 8:00 = 2:30(8時間未満の日は 0:00)
TIME関数で「8時間」を正式な時間データとして書いておくと、式の意味が誰にでも読めて、引き継ぎのときにも親切です。所定時間を別セルに置いて参照すれば、パートさんなど所定時間が違う人にも同じ式が使えます。
落とし穴5:月末日を「30日」決め打ちしてしまう
「月末締め翌月末払い」の支払期日を、=DATE(年,月+1,30)のように作っていませんか?これだと31日の月は1日早く、2月は存在しない日付になって3月にずれ込みます。
月末日はEOMONTH関数に任せるのが鉄則です。
=EOMONTH(A2,0) ← 当月末(2026/10/31) =EOMONTH(A2,1) ← 翌月末(2026/11/30) =EOMONTH(A2,-1)+1 ← 当月1日(2026/10/1)
第2引数は「何か月後か」。0で当月、1で翌月、−1で前月です。前月末に1を足せば月初日になる、という使い方も覚えておくと便利です。
似た関数に「○か月後の同じ日」を返すEDATEがあります。=EDATE("2026/1/31",1)は2月28日を返すなど、月末をまたぐと日付が丸められる点は知っておきましょう。契約の更新日などで使う場面があります。
落とし穴6:土日祝の支払日を手で直している
支払期日が土日や祝日に当たったら前営業日に繰り上げる──この調整を毎月カレンダーを見ながら手入力していると、いつか必ず漏れます。
営業日数を数える:NETWORKDAYS
=NETWORKDAYS(開始日,終了日,祝日リスト)
=NETWORKDAYS("2026/10/1","2026/10/31",祝日) → 当月の営業日数
土日と、指定した祝日リストを除いた日数を返します。所定労働日数のチェックや、締め日から支払日までの日数確認に使えます。
期日を営業日に寄せる:WORKDAY
=WORKDAY(EOMONTH(A2,1)+1,-1,祝日) ← 翌月末が休日なら前営業日 =WORKDAY(期日-1,1,祝日) ← 期日が休日なら翌営業日
🙋 生徒:なんで「+1」してから「−1」営業日なんですか?
🧑🏫 コーチ:WORKDAYは開始日そのものを数に入れない関数なんです。月末の翌日から「1営業日戻る」と数えれば、月末が平日ならその日、休日なら直前の平日が返ります。翌営業日寄せは、その逆で「前日から1営業日進む」ですね。
実際に当てはめてみましょう。10月請求分の「翌月末払い」なら期日は2026年11月30日。この日は月曜日なので、そのまま11月30日が返ります。一方、2027年1月末(31日)は日曜日なので、同じ式で1月29日(金)が自動的に返ってきます。請求書の一覧にこの式を1列足しておくだけで、毎月のカレンダー確認がまるごと不要になります。
おまけ:勤続年数は「隠し関数」DATEDIFで
有給休暇の付与日数や退職金の計算では、入社日からの勤続年数が必要になります。ここで=(今日-入社日)/365とやると、うるう年の分だけずれて、付与日の前後で1年違ってしまうことがあります。
=DATEDIF(入社日,TODAY(),"Y") ← 満年数 =DATEDIF(入社日,TODAY(),"YM") ← 1年未満の月数
DATEDIFは関数の一覧や入力候補に出てこない「隠し関数」ですが、手で入力すればちゃんと動きます。開始日が終了日より後だと#NUM!エラーになるので、入社日と基準日の順番には注意してください。
落とし穴を一覧でおさらい
| 症状 | 原因 | 対策 |
|---|---|---|
| 日付で計算できない | 文字列で取り込まれている | DATEVALUE/区切り位置 |
| 合計が0:00に戻る | 表示形式が h:mm | [h]:mm に変更 |
| 深夜勤務がマイナス | 退勤<出勤 | MOD(退勤−出勤,1) |
| 金額が24分の1 | 時間は1日=1の小数 | ×24/ROUND |
| 2月の期日がずれる | 月末日を決め打ち | EOMONTH |
| 休日の期日を手修正 | 営業日の自動判定がない | WORKDAY+祝日リスト |
経理マンの一言
9月から勤怠管理を担当するようになって痛感したのは、日付と時間のミスは「見た目が正しそうに見える」のがいちばん怖い、ということです。合計が「16:00」でも、期日が「3/2」でも、ぱっと見では違和感がありません。
だから私は、関数を入れたら必ず「答えがわかっている1行」で検算するようにしています。月末が31日の月、2月、祝日をまたぐ月、深夜勤務のある日。この4パターンで想定どおりの答えが出れば、ほとんどの落とし穴は事前に潰せます。
もうひとつ大事なのが、Excelで決めてはいけないことがあるという点。勤務時間の丸め方や支払日の繰り上げ・繰り下げは、就業規則や取引条件で決まるものです。関数はそのルールを正確に再現する道具であって、ルールそのものを作るわけではありません。ルールを確認してから式を組む。この順番さえ守れば、日付と時間の計算はぐっと怖くなくなりますよ。
まとめ
日付と時間の計算は、「日付=整数、時間=小数」という正体さえわかれば、ほとんどの落とし穴に説明がつきます。表示形式の [h]:mm、深夜勤務のMOD、時給計算の×24、月末のEOMONTH、営業日のWORKDAY。この5つを押さえておけば、勤怠集計も支払管理もぐっと安定するはずです。
次回は、今回少しだけ触れたROUND関数ファミリー(ROUND・ROUNDDOWN・ROUNDUP)で、経理の端数処理を整理する予定です。
※本記事の操作はMicrosoft 365版Excel(2026年10月時点)で確認しています。

コメント