多时段考勤表公式报错求助:返回TRUE而非总工时
多时段考勤工时统计公式修复
原公式的核心问题
- 语法错误:
AND(B3="",M3<>",N3<>",O3<>")中的字符串引号未闭合(M3<>"缺少闭合的""),导致公式解析失败,返回布尔值TRUE - 列逻辑矛盾:你标注的“上班时间在C、E、H,下班在C、F、I”存在冲突,结合公式里的
C3>B3判断,实际应为上班列:B、E、H,下班列:C、F、I - 计算逻辑漏洞:部分时段的工时未做24小时转换,嵌套条件覆盖不全,导致计算结果异常
修复后的可用公式
假设工时统计单元格为P3,直接使用:
=IF(OR(M3<>"",N3<>"",O3<>""),0, ROUND( (IF(AND(B3<>"",C3>B3),(C3-B3)*24,0))+ (IF(AND(E3<>"",F3>E3),(F3-E3)*24,0))+ (IF(AND(H3<>"",I3>H3),(I3-H3)*24,0)), 2) )
公式解释
- 优先级判断:只要M(病假)、N(节假日)、O(休假)任一单元格非空,直接返回0工时
- 分段独立计算:每段出勤仅在“上班时间非空且下班晚于上班”时计算,自动转换为小时数
- 精度控制:用
ROUND保留2位小数,避免时间计算的浮点误差 - 扩展性:如果需要更多出勤时段,直接复制
(IF(AND(...),...),0)块并替换对应列标即可
额外提示
- 把工时统计单元格的格式设置为「数值」或「常规」,避免显示为时间格式
- 如果实际上下班列和假设的B/C、E/F、H/I不符,直接替换公式里的列标就行
内容的提问来源于stack exchange,提问作者Tyler Ballou
相关产品推荐
相关产品推荐

