Google Sheets判断缺勤时长(小时/天)的ARRAYFORMULA数组公式失效问题求助
解决Google Sheets中ARRAYFORMULA计算缺勤时长的问题
我一眼就看出你问题出在哪了——普通公式里用的AND函数在数组公式里根本不支持批量逻辑判断!它只能处理单个布尔值,没法对整列的日期数组逐行做判断,这就是你数组公式失效的核心原因。另外DATEDIF直接套数组也容易出兼容问题,咱们来改改:
先回顾下你的需求逻辑:
- 若Data1和Data2是同一天(日、月都匹配),就按小时差除以10计算(应该是你的考勤换算规则)
- 否则计算两个日期之间的整天数
修正后的数组公式
=ARRAYFORMULA(IF(D2:D="",,IF((DAY(D2:D)=DAY(E2:E))*(MONTH(D2:D)=MONTH(E2:E)),(HOUR(E2:E)-HOUR(D2:D))/10,INT((E2:E-D2:D)/1))))
关键调整点解释
替换
AND为数组兼容的逻辑与
把AND(DAY(D2:D)=DAY(E2:E),MONTH(D2:D)=MONTH(E2:E))改成(DAY(D2:D)=DAY(E2:E))*(MONTH(D2:D)=MONTH(E2:E))。因为Google Sheets里布尔值TRUE=1、FALSE=0,相乘就相当于逐行判断“两个条件同时成立”,完美适配数组运算。用
INT((E-D)/1)替代DATEDIFDATEDIF在数组里偶尔会因为空值或无效日期报错,而日期直接相减得到的是带小数的天数(比如1.5天就是36小时),用INT()取整就能得到准确的整天数,更稳定且简洁。添加空行判断
外层的IF(D2:D="",, ...)能避免公式在空行里填充错误值,让表格更整洁。
测试你的数据示例
- 第一行(同一天):
(9-8)/10 = 0.1,符合你的小时计算规则 - 第二行(跨天):
INT((09/01/2021-04/01/2021)/1) = 5,正确返回天数差
内容的提问来源于stack exchange,提问作者Albe
相关产品推荐
相关产品推荐

