计算下一个日期的公式,不包括日期列表

时间:2016-01-11 00:12:24

标签: excel date recursion excel-formula iteration

有人可以帮助公式计算下一个可用日期,不包括特定日期列表(某些事件的阻止日期)。 在附加的图像中,当输入A列中的计划日期时,它应基于计算发票日期 1.最早的发票日期是最接近(计划日期+5天)的事件日期。 2.如果计算的发票日期是其中一个阻止日期,则应将发票日期设置为下一个工作日期

上面的步骤1计算如公式所示

=MIN(IF($B$2:$B$8-($A2+5)>=0,$B$2:$B$8))

对于第2步,我们非常感谢您的帮助。在计算的发票日期尝试Vlookup以匹配阻止日期中的值 - 一旦计算出第二天。但是当第二天计算时也被阻止了一天,它就失败了。例如,在第一个数据行中,基于步骤1的发票日期是20-Jan-16,即阻止日期。

在步骤2中,如果VLOOKUP用于匹配20-Jan-16并且增加1天,则它将给出21-Jan-16,这也是阻止日期。有关递归/迭代计算的建议吗?

Sample data

OP's sample data

阻止日期是一年中相当大的列表,按随机顺序排列。

1 个答案:

答案 0 :(得分:2)

WORKDAY.INTL function¹应该对此特别有效。您不仅可以指定一系列假期作为阻止日期,还可以指定一个特殊的周末字符串,用于标识日期被视为周末。由于您不想排除任何其他星期几,因此只需"0000000"

在E2中,

=IFERROR(WORKDAY.INTL(AGGREGATE(15, 6, (B$2:INDEX(B:B, MATCH(1E+99,B:B )))/(B$2:INDEX(B:B, MATCH(1E+99,B:B ))-(A2+5)>=0), 1)-1, 1, "0000000", C$2:INDEX(C:C, MATCH(1E+99,C:C ))), "")

由于我们正在处理第二代函数,因此我将MIN(IF(...数组公式更改为AGGREGATE² function,不必输入数组并使用包装IFERROR function来避免显示E8中出现#DIV/0!错误。

根据需要填写。

workday_intl_aggregate

¹ Excel 2010引入了WORKDAY.INTL function¹。早期版本不提供。

² {2010}引入了AGGREGATE function。它在早期版本中不可用。