Excel使って時間を計算しようとすると様々な問題が起きます。
そもそもExcel自体が「時間」を値として扱う機能が脆弱です。

二つの指定した時刻の間隔を求めるDatedifという関数が用意されてはいますが、最小単位は日数となっていて秒どころか分も時も求められません。以下Excel2000のヘルプより
引用ここから-------
DATEDIF
指定された期間内の日数、月数、または年数を返します。この関数は、Lotus 1-2-3 関数との互換性を保つために用意されています。
書式
DATEDIF(開始日,終了日,単位)
引用ここまで-------
単位として指定できるのは年と月と日だけ。これを秒までカバーしてくれればまだ多少は使いやすいだろうと思うのですが、なぜかOfficeのバージョンが進んでも変わりません。


VBAではDateDiffという関数が用意されています。fが1個多いだけで紛らわしいw
以下Excel2000VBAヘルプより
引用ここから-------
DateDiff 関数
2 つの指定した日付の時間間隔を表すバリアント型 (内部処理形式 Date の Variant) の値を指定します。
構文
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
引用ここまで-------
こちらであればintervalに秒や分,時を指定してdate1とdate2の間隔を取得出来るのですが、小数点以下の値を得ることはできず、小数点以下は切り上げられ整数に丸められます。
DateDiff("y", "2015/12/31 23:59:59","2016/01/01 0:00:00")とすると
1秒しか差がないのに間隔が年でも 1 が返ってきてしまいます。ダメじゃん

一方でワークシート上で複数のセルに時刻を入力し、セル参照で加算したり減算したりすることができます。

こんなシートの使い方をする方が多いようです。
田代の勤務時間が計算できずに####となっています。ザマみろ
日をまたいでいるからなのですが、セルの書式設定を[標準]にするとマイナスの値が現れます。この場合は「-0.572916667」となります。セルの書式設定が[時刻]や[日付]であると、マイナスの値を表示することができません。

ではどうしたらいいでしょう?
結論から言えばB列C列に時刻を入力するときに日付を含めて入力するべきなのです。セルに日付を除いた時刻を入力するとそのセルの値は0から1の間の小数になります。セルの書式を[標準]にするとこうなります。

細かいことを言うとこの数値は「時間」を表しているのではなく、「時刻」を表しています。
書式を[日時]にすると

003

田代の終了時間が翌日の9時であれば"1900/1/1 09:00"と入力すれば正しい答えが得られるのですが、そんだったら最初から正しい日付を入力した方がいいではないですか。
C列の値がB列よりも小だったらC列の値に1を加え、そこからB列とC列の値を減じるという小手先の対処方法もありますが、あえてここでは数式を示しません。

一般的に使われているだろう小手先の対処方法は、勤怠管理であれば原則的に24時間を超えて続けて勤務することはないだろう、という仮定のもとでの計算方法にしかならないのです。機械の連続運転時間や何かの事象が発生した間隔を計測するときにはこんな計算方法は使えません。

こうすれば全てのお悩み解決な例がこちら
E列の数式は =C2-B2-D2

004