Excel薪资表工时计算函数仅支持单个单元格,区域使用报错
解决Excel工时区域求和的问题
你的问题根源是:原函数中的SEARCH、LEFT、REPLACE等文本处理函数,在面对区域引用时不会自动生成对应每个单元格的数组结果,导致Excel判定数据类型不匹配。下面提供两种无需使用SUMPRODUCT的解决方案:
方法一:适用于Excel 365/2021(动态数组版本)
使用BYROW函数遍历目标区域,对每个单元格单独执行你的工时计算逻辑,最后求和:
=SUM(BYROW(E79:AI79,LAMBDA(cell,IF(ISBLANK(cell),0,((IF(TIMEVALUE(REPLACE(cell,1,SEARCH("-",cell,1),""))<TIMEVALUE(LEFT(cell,SEARCH("-",cell,1)-1)),(TIMEVALUE(REPLACE(cell,1,SEARCH("-",cell,1),""))-TIMEVALUE(LEFT(cell,SEARCH("-",cell,1)-1)))+1,(TIMEVALUE(REPLACE(cell,1,SEARCH("-",cell,1),""))-TIMEVALUE(LEFT(cell,SEARCH("-",cell,1)-1)))))*24))))
- 原理:
BYROW会将E79:AI79中的每个单元格依次传入LAMBDA的cell参数,执行你原有的单个单元格计算逻辑,最终用SUM汇总所有单日工时。
方法二:适用于旧版Excel(无动态数组功能)
将原函数的单个单元格引用替换为区域,然后以数组公式的方式输入(输入后按Ctrl+Shift+Enter,Excel会自动为公式添加{}):
{=SUM(IF(ISBLANK(E79:AI79),0,((IF(TIMEVALUE(REPLACE(E79:AI79,1,SEARCH("-",E79:AI79,1),""))<TIMEVALUE(LEFT(E79:AI79,SEARCH("-",E79:AI79,1)-1)),(TIMEVALUE(REPLACE(E79:AI79,1,SEARCH("-",E79:AI79,1),""))-TIMEVALUE(LEFT(E79:AI79,SEARCH("-",E79:AI79,1)-1)))+1,(TIMEVALUE(REPLACE(E79:AI79,1,SEARCH("-",E79:AI79,1),""))-TIMEVALUE(LEFT(E79:AI79,SEARCH("-",E79:AI79,1)-1)))))*24)))}
- 原理:数组公式会强制Excel对区域内的每个单元格单独执行文本提取、时间转换和工时计算,生成对应每个单元格的工时数组,最后通过
SUM求和。
注意事项
你原函数中有一处笔误:最后一个SEARCH("-",E79:AI79)应为SEARCH("-",E79),上述两个公式已修正该问题,避免计算错误。
内容的提问来源于stack exchange,提问作者Na'il
相关产品推荐
相关产品推荐

