以下のような出社時刻と退社時刻、休憩時間を管理した表があります。
この表のD列の勤務時間を求める方法について解説していきます。

時刻はシリアル値という数値で管理されています。
そのため、時刻の差は引き算で求めることができます。
単純に勤務時間を求める式は以下のようになるかと思います。
勤務時間 = 退社時刻 - 出社時刻 - 休憩時間
こちらの計算式でD列を埋めてみます。
=B3-A3-C3

そのようにすることで、勤務時間を求めることができるのですが、退社時刻が深夜の場合は求めることができません。
深夜の時刻を翌日の値として入力している場合は、求めることができますが、直接「1:30」などと入力している場合は求めることができません。

求めることができない理由は、退社時刻より出社時刻の方が大きな数値となってしまい、「退社時刻 – 出社時刻 – 休憩時間」の計算結果がマイナスになってしまうためです。
以上の理由から、退社時刻よりも出社時刻の方が大きい場合は、特殊な計算をする必要があります。
特殊な計算とはいっても複雑なものではありません。
以下の条件を加えるだけで、深夜退社でも正しく計算することができるようになります。
『出社時刻が退社時刻よりも大きい場合は、計算結果に1を加え、それ以外は0を加える』
シリアル値の概念を理解している場合は、上記の条件式のイメージがしやすいかと思います。
1日はシリアル値で1と表現され、時間は1をさらに細かくした値です。
出社時刻が退社時刻よりも大きい場合は、本来、退社時刻の方が大きくなければいけないため、深夜時刻が入力されていることが考えられます。
深夜時刻とは、正確には翌日の朝になります。
そのため、1を加えて、翌日の時間として計算させるという理屈になります。
3行目の数式に条件式を加えると以下のようになります。
// =IF(論理式, [値が真の場合], [値が偽の場合])
=B3-A3-C3+IF(A3>B3,1,0)
反映させると以下のように求めることができます。

時刻や日付の計算をする上では、シリアル値の仕組みから考えると、徐々に解決策が思い付くようになるかと思います。