首页 > 解决方案 > 谷歌表格递归数组公式

问题描述

我正在尝试在另一列中创建从设定日期到最近日期的连续日期列表。

=ARRAYFORMULA(IF(OR(A2:A=MAX(C:C),A2:A=""),"",DATEVALUE(A2:A+1)))

我用来MAX()在 C 列中查找最近日期的日期。我试图让这个公式做的是递归检查上面单元格中的日期以确定是否已达到最大日期。我已经确定 A2 已经有设定的开始日期。

输出只在一个单元格中,我不知道为什么。

感谢您的帮助。

标签: google-sheetsarray-formulas

解决方案


似乎困扰您当前的数组公式的是,正如定义的那样,它永远存在并且是自我引用的。可能有一种方法可以通过将首选项设置为迭代并帮助它将使用“”解释为收敛到重复单元格来实现它。这是一种回避这些问题的方法。您可以对其进行更多的防弹(例如,通过将其封装在 IFERROR 中),但基本上您可以准确计算所需的条目数,然后在 Array 公式中相应地设置您的范围。在 A3 中放置以下内容:

=arrayformula(DATEVALUE(Row(indirect("A3:A"&(max(C:C)-A2+2)))+A2-2))

这将构建您想要的确切范围,然后使用显式而不是递归公式计算每个条目。

编辑:上述实现假设您至少需要 2 个日期。您可以使用以下可读性较差的公式来处理这种情况和其他奇怪的情况,=if(max(C:C)>A2,iferror(arrayformula(DATEVALUE(Row(indirect("A3:A"&(max(C:C)-$A$2+2)))+$A$2-2))),"")


推荐阅读