最近、シフト管理表をExcelで作る機会があり、夜勤のような日付を跨ぐ勤務時間の計算で少し苦戦したので、Excelでの計算方法を備忘録として残しておく。
例えば以下のような表があるとする。
![](https://i0.wp.com/chusotsu-program.com/wp-content/uploads/2021/10/image-8.png?resize=694%2C136&ssl=1)
セルC2に開始時間と終了時間の差となる時間を入れたいのだが、単純に以下のような数式を入力すると失敗する。
![](https://i0.wp.com/chusotsu-program.com/wp-content/uploads/2021/10/image-9.png?resize=708%2C142&ssl=1)
![](https://i0.wp.com/chusotsu-program.com/wp-content/uploads/2021/10/image-10.png?resize=706%2C140&ssl=1)
日付を跨ぐ計算となるので、正しくは9:00とならなければいけないのだが、結果は15:00となってしまっている。
日付を跨いだ時間の差を計算する数式
正解はこちら。
![](https://i0.wp.com/chusotsu-program.com/wp-content/uploads/2021/10/image-11.png?resize=788%2C144&ssl=1)
![](https://i0.wp.com/chusotsu-program.com/wp-content/uploads/2021/10/image-12.png?resize=714%2C148&ssl=1)
終了時間から開始時間を引くことで正しい時間を得ることができるのだが、数式内にあるIF関数のところが重要なポイント。
IF文を使わない場合でも同じ結果を得ることができるように見えるが、
![](https://i0.wp.com/chusotsu-program.com/wp-content/uploads/2021/10/image-13.png?resize=716%2C196&ssl=1)
![](https://i0.wp.com/chusotsu-program.com/wp-content/uploads/2021/10/image-14.png?resize=698%2C186&ssl=1)
表示形式を変更して実際の値を見ると、以下のように結果は大きく異なることが分かる。
![](https://i0.wp.com/chusotsu-program.com/wp-content/uploads/2021/10/image-15.png?resize=948%2C188&ssl=1)
Excelでは1日24時間を「1」として考えるため、セルC2の値「AM9:00」は「9 / 24 = 0.375」となり正しい結果となっているのだが、セルD2は丸1日分の値がずれているのが分かる。
そのため、日付跨ぎの時間計算をおこなう場合は単純な引き算だけでなく、IF文で別途1日分の値を加算してやる必要があるというわけだ。
表示形式が時間表記となっていると一見同じ結果に見えてしまうため、この罠にハマらないように気を付けてもらいたい。