Google Sheet使用ARRAYFORMULA计算工时求和结果错误如何修复
问题根因
你当前的计算错误核心是ARRAYFORMULA逐行重复计算:
每个日期对应两行数据,但原公式会对区间内每一行(包括第二行隐藏行)都执行「当前行E列+下一行E列」的计算,相当于每个日期的工时统计被生成了两次,分别存在日期的第一行和第二行。
你选中未隐藏的第一行数据悬停时,求和结果是正确的,但SUM函数默认会统计隐藏行的数值,累加了两行重复的计算结果,最终数值就会远大于预期。
修复方案
第一步:修正正常工时ARRAYFORMULA(G列)
仅在每个日期的第一行生成计算结果,第二行返回0,公式如下:
=arrayformula(IF( MOD(ROW(A3:A70)-ROW(A3),2)<>0,0, IFS( WEEKDAY(A3:A70,1)=1,0, WEEKDAY(A3:A70,1)=7,0, E3:E70+E4:E70>8,8, E3:E70+E4:E70<=8, E3:E70+E4:E70 ) ))
第二步:修正加班工时ARRAYFORMULA(H列)
同样仅在每个日期的第一行生成计算结果,第二行返回0,公式如下:
=arrayformula(IF( MOD(ROW(A3:A70)-ROW(A3),2)<>0,0, IFS( WEEKDAY(A3:A70,1)=1,E3:E70+E4:E70, WEEKDAY(A3:A70,1)=7,E3:E70+E4:E70, E3:E70+E4:E70>8,E3:E70+E4:E70-8, E3:E70+E4:E70<=8, 0 ) ))
第三步:保留原有求和公式即可
原有的=SUM(IFERROR(G3:G71,0))和=SUM(IFERROR(H3:H71,0))不需要修改,因为第二行已经返回0,求和结果会自动匹配实际值。
补充说明
如果后续日期范围扩展,只需要把公式中A3:A70、E3:E70的区间上限调整为对应行号即可,逻辑不需要变动。
内容的提问来源于stack exchange,提问作者Paweł
相关产品推荐
相关产品推荐

