基于日期范围计算工时的嵌套IF公式问题求助
考勤工时计算公式修正方案
问题场景
我用嵌套IF公式计算考勤总工时,支持区分连续工作和每日部分工时的情况,大部分场景结果正确,但遇到跨天夜班(开始时间晚于结束时间)时会多算工时;要是删掉公式里D12-B12+1的+1,又会搞坏其他正常条目的计算结果。原公式如下:=IF(F12="Yes",(P12-O12) * 24 *K12, IF(F12="No",(MOD(E12-C12,1)) * 24 * (IF(AND(D12=B12+1,E12<C12),+1,D12-B12+1)) * K12,0))
问题根源
原公式里的跨天判断只覆盖了刚好跨1天的情况(D12=B12+1),但当跨多天且存在夜班时,D12-B12+1会多算1天,导致工时被重复计算。
修正公式
=IF(F12="Yes",(P12-O12)*24*K12, IF(F12="No", MOD(E12-C12,1)*24* (IF(AND(D12>B12,E12<C12), D12-B12, D12-B12+1))*K12, 0))
修正逻辑说明
- 连续工作场景(
F12="Yes"):保留原逻辑,用结束时间减开始时间换算成小时后乘以系数K12。 - 非连续/每日部分工时场景(
F12="No"):MOD(E12-C12,1)确保跨天单次工时计算正确(比如22:00到次日02:00会得到4小时,而非负数)。- 天数计算优化:只要是跨天且结束时间早于开始时间(不管跨几天),就用
D12-B12作为天数(去掉多算的1天);其他正常情况仍用D12-B12+1。
内容的提问来源于stack exchange,提问作者TTVH
相关产品推荐
相关产品推荐

