You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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))))

关键调整点解释

  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,相乘就相当于逐行判断“两个条件同时成立”,完美适配数组运算。

  2. 用INT((E-D)/1)替代DATEDIF
    DATEDIF在数组里偶尔会因为空值或无效日期报错,而日期直接相减得到的是带小数的天数(比如1.5天就是36小时),用INT()取整就能得到准确的整天数,更稳定且简洁。

  3. 添加空行判断
    外层的IF(D2:D="",, ...)能避免公式在空行里填充错误值,让表格更整洁。

测试你的数据示例

  • 第一行(同一天):(9-8)/10 = 0.1,符合你的小时计算规则
  • 第二行(跨天):INT((09/01/2021-04/01/2021)/1) = 5,正确返回天数差

内容的提问来源于stack exchange,提问作者Albe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:54:17