递归函数和循环 Excel

Recursive Function & Looping In Excel

我正在寻找一些指导,以在 table 中循环遍历 Excel 中的函数,而不会出现 运行 循环引用错误。我花了很多时间尝试 COUNTIF、MATCH,本质上,我需要为“期望日期”列创建一个 function/formula,以便它从“原始日期”列中获取值并根据以下值更改值以下参数:

这是我希望函数执行的操作:

第 1 行包含原始日期值 8/1,因为所需行列中不存在其他值,它将 return 8/1。

第 2 行包含原始日期值 8/1,但由于所需日期值的第 1 行已经包含值 8/1,因此它将添加 +1 天,因此它变成 8/2。

第 3 行包含原始日期值 8/1,但由于所需日期的第 1 行和第 2 行包含该值,它会增加 +2 天,因此变成 8/3。

第 6 行包含原始日期值 8/3,但由于所需日期的第 3 行包含该值,它会加上 +1 天,所以它变成 8/4。

如果原始日期中的任何给定日期发生变化,所需日期中的值应相应更改,方法是添加可变天数,直到所需日期列中的所有值都是唯一的。

原始日期 期望的日期
1 2021 年 8 月 1 日 2021 年 8 月 1 日
2 2021 年 8 月 1 日 2021 年 8 月 2 日
3 2021 年 8 月 1 日 2021 年 8 月 3 日
4 2021 年 8 月 12 日 2021 年 8 月 12 日
5 2021 年 8 月 12 日 2021 年 8 月 13 日
6 2021 年 8 月 3 日 2021 年 8 月 4 日
7 2021 年 8 月 4 日 2021 年 8 月 5 日
8 2021 年 8 月 3 日 2021 年 8 月 6 日
9 2021 年 8 月 13 日 2021 年 8 月 14 日

我已经在这个问题上花费了 9 个多小时,因此非常感谢此时的任何帮助。我不介意使用 VBA,但出于兼容性目的,最好使用函数。

谢谢!

一种方法可能是从第一列中的日期开始生成日期,但忽略任何已使用的日期 (countif>0),然后选择其中最低的日期:

=LET(maxdate,$D,
startdate,B2,
seq,SEQUENCE(maxdate-startdate,1,startdate),
MIN(IF(COUNTIF(E:E1,seq),maxdate,seq)))

或稍短

=LET(maxdate,$D,
startdate,B2,
seq,SEQUENCE(maxdate-startdate,1,startdate),
MIN(IF(COUNTIF(E:E1,seq)=0,seq)))

如果你没有Excel 365,你可以用Row代替Sequence:

=MIN(IF(COUNTIF(E:E1,ROW(INDEX(A:A,B2):INDEX(A:A,$D)))=0,ROW(INDEX(A:A,B2):INDEX(A:A,$D))))

使用 CtrlShiftEnter

作为数组公式输入

编辑

如果您想像评论中那样连接,您将无法使用 Min(因为值不是数字)但您可以使用 index/match 找到第一个可用日期一个特定的人:

=LET(maxdate,$D,
startdate,A2,
name,B2,
seq,SEQUENCE(maxdate-startdate,1,startdate),
seqName,seq&name,
INDEX(seqName,MATCH(0,COUNTIF(H:H1,seqName),0)))

如果您想让日期显示为日期而不是数字,您可以将它们包装在文本中:

=LET(maxdate,$D,
startdate,A2,
name,B2,
seq,SEQUENCE(maxdate-startdate,1,startdate),
seqName,TEXT(seq,"mm/dd/yy")&name,
INDEX(seqName,MATCH(0,COUNTIF(H:H1,seqName),0)))