【Excel】日付・時間計算の落とし穴6選|勤務時間・月末日・営業日でつまずかない関数と対策

エクセル・実務

こんにちは、コウイチです。

経理の仕事に戻ってから毎月必ず触るのが、勤怠データと支払期日の管理です。どちらも「日付」と「時間」のかたまり。ところがこの2つ、Excelでは普通の数字のつもりで扱うと、いきなり「0:00」になったり、マイナスになったり、2月だけ期日がずれたりと、地味に罠だらけなんです。

今回は、実際に私が勤怠集計や支払管理でつまずいた(あるいは、つまずきかけた)ポイントを6つに絞って、原因と対策をまとめました。

本題の前に、1冊だけ紹介させてください。日付・時刻の関数をもっと体系的に押さえたい方には、『Excel関数+組み合わせ術[実践ビジネス入門講座]【完全版】第3版』(SBクリエイティブ)が手元に置いておくと便利です。仕事で使う関数に絞って解説していて、「日付・時刻の計算」の章もあります。XLOOKUPやGROUPBYなどの新しい関数を含めてExcel 2024まで対応し、サンプルデータもダウンロードできるので、この記事の内容と合わせて手を動かしながら復習できますよ。

Excel関数+組み合わせ術 [実践ビジネス入門講座]【完全版】 第3版 作業効率とクオリティがいっきに高まる究極の使いこなしテクニック 【Excel 2024/2021/Microsoft 365対応】 | きたみ あきこ |本 | 通販 | Amazon
Amazonできたみ あきこのExcel関数+組み合わせ術 [実践ビジネス入門講座]【完全版】 第3版 作業効率とクオリティがいっきに高まる究極の使いこなしテクニック 【Excel 2024/2021/Microsoft 365対応】。アマ…

まず知っておきたい「日付と時間の正体」

🙋 生徒:そもそも、Excelの日付ってただの文字じゃないんですか?

🧑‍🏫 コーチ:実は中身は「数字」なんです。1900年1月1日を「1」として、1日ごとに1ずつ増えるシリアル値で管理されています。たとえば2026年10月31日は「46326」です。

🙋 生徒:じゃあ時間は?

🧑‍🏫 コーチ:時間は「1日=1」の小数です。12:00なら0.5、6:00なら0.25。ここを押さえておくと、この後の落とし穴がほぼ全部説明できますよ。

日付=1日1ずつ増える整数、時間=1日を1とした小数。「8時間」は8ではなく「0.333…」として記録されている。

この記事では、次の統一サンプルデータを使って解説します。

A:日付B:出勤C:退勤D:休憩E:実働
22026/10/19:0018:001:008:00
32026/10/29:0020:301:0010:30
42026/10/322:005:001:00?

落とし穴1:CSVの日付が「文字列」で計算できない

勤怠システムや会計ソフトから出力したCSVを開くと、見た目は日付なのに計算するとエラー(#VALUE!)になることがあります。これは日付が文字列として読み込まれているのが原因です。

見分け方は簡単で、セルが左寄せなら文字列、右寄せならシリアル値の可能性が高いです。=ISNUMBER(A2)で確認すると確実です。

=DATEVALUE(A2)      ← "2026/10/01"のような文字列を日付に変換
=--A2               ← 同じ効果の短縮形(表示形式は日付に)
大量の列をまとめて直すなら、[データ]→[区切り位置]で、最後の画面で列のデータ形式を「日付(YMD)」に指定するのが最速です。「20261001」のような8桁の数字にも効きます。

落とし穴2:24時間を超えた合計が「0:00」に戻る

月の実働時間をSUMで合計したら、160時間あるはずが「16:00」と表示された──勤怠集計で一番よく見る事故です。

計算自体は合っています。問題は表示形式で、標準の「h:mm」は24時間で1周してしまうため、日数分が見えなくなっているだけです。

表示形式(ユーザー定義): [h]:mm
→ 160:00 と正しく表示される
時間の「合計セル」は必ず [h]:mm。角かっこの h は「24時間で繰り上げない」という意味です。

落とし穴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日分を足した値になるんです。日をまたがない行に使っても結果は変わらないので、全行に同じ式を入れておけば安心ですよ。

MODで対応できるのは「24時間未満の勤務」まで。24時間を超える連続勤務がありうる職場では、出退勤を「日付+時刻」の形で記録し、単純に引き算する設計にしてください。

落とし穴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時間」を正式な時間データとして書いておくと、式の意味が誰にでも読めて、引き継ぎのときにも親切です。所定時間を別セルに置いて参照すれば、パートさんなど所定時間が違う人にも同じ式が使えます。

「15分未満は切り捨て」のような端数処理を毎日の勤務時間に適用すると、労働基準法上の問題になる場合があります。丸めのルールは必ず就業規則を確認し、迷ったら労務担当者や社労士に相談してください。Excelの式は、ルールが決まってから組むものです。

落とし穴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を足せば月初日になる、という使い方も覚えておくと便利です。

EOMONTHの結果がただの数字(46326など)で表示されたら、表示形式を「日付」に変えるだけでOKです。関数の間違いではありません。

似た関数に「○か月後の同じ日」を返す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列足しておくだけで、毎月のカレンダー確認がまるごと不要になります。

祝日リストは自分で用意する必要があります。Excelは日本の祝日を自動では知りません。別シートに祝日の一覧を作ってテーブル化し、毎年更新しましょう。会社独自の休業日(年末年始・夏季休業)を含めるかどうかも、用途ごとに決めておくのがコツです。
土日以外が休み(例:水・日休み)の職場では、休日パターンを指定できる NETWORKDAYS.INTL / WORKDAY.INTL を使います。

おまけ:勤続年数は「隠し関数」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月時点)で確認しています。

Excel関数+組み合わせ術 [実践ビジネス入門講座]【完全版】 第3版 作業効率とクオリティがいっきに高まる究極の使いこなしテクニック 【Excel 2024/2021/Microsoft 365対応】 | きたみ あきこ |本 | 通販 | Amazon
Amazonできたみ あきこのExcel関数+組み合わせ術 [実践ビジネス入門講座]【完全版】 第3版 作業効率とクオリティがいっきに高まる究極の使いこなしテクニック 【Excel 2024/2021/Microsoft 365対応】。アマ…

コメント

タイトルとURLをコピーしました