Google Sheets IF数组公式仅返回3种条件中的2种问题排查
问题分析与公式修正
原公式核心问题
你使用的AND()函数是单值逻辑判断函数,无法在ArrayFormula()中对每行数据进行逐行数组运算。它会把P2:P >= TODAY()和P2:P <= TODAY()+30这两个数组条件当作整体判断,只有当所有行同时满足两个条件时才返回TRUE,否则返回FALSE,这直接导致未来30天到期的内容无法被正确标记为「Review due」。
修正后的公式
方案一:用数组逻辑与(*)替代AND
=ArrayFormula(IF(ISBLANK(P2:P),"", IF(LOWER(AC2:AC)="DRAFT", FALSE, IF(P2:P < TODAY(), "Expired", IF((P2:P >= TODAY())*(P2:P <= TODAY()+30), "Review due", FALSE)))))
在Google Sheets中,*可以实现数组的逻辑与运算,会逐行判断每行的两个条件是否同时成立。
方案二:简化条件判断(更高效)
由于已经通过IF(P2:P < TODAY(), "Expired", ...)排除了已过期的情况,剩下的内容必然满足P2:P >= TODAY(),因此可以直接判断是否在未来30天内:
=ArrayFormula(IF(ISBLANK(P2:P),"", IF(LOWER(AC2:AC)="DRAFT", FALSE, IF(P2:P < TODAY(), "Expired", IF(P2:P <= TODAY()+30, "Review due", FALSE)))))
额外注意事项
- 确保列P的内容是标准日期格式,而非文本格式。如果是文本日期,需要用
DATEVALUE(P2:P)转换为日期值,例如将公式中的P2:P替换为DATEVALUE(P2:P)(需保证文本日期格式为Google Sheets可识别的DD MM YYYY)。 - 若
TODAY()+30的计算不符合预期,可手动验证日期数值:Google Sheets中日期以数值存储,TODAY()返回当前日期的数值,加30即为30天后的日期数值。
内容的提问来源于stack exchange,提问作者Manraj Sidhu
相关产品推荐
相关产品推荐

