根据规则

时间:2017-06-20 14:55:38

标签: excel

我想根据我的业务规则生成一系列日期,最好使用Excel或其他Office产品。

业务规则示例:

  • 包括所有星期二,星期四和星期五。
  • 排除最后一天 每个月。

这会产生:

27 Jun 2017
29 Jun 2017
04 Jul 2017 
06 Jul 2017
07 Jul 2017

如果您可以推荐使用哪些功能和一般方法,我不需要完整的解决方案。提前谢谢!

2 个答案:

答案 0 :(得分:2)

这是一种蛮力方法。

在A1中列出了开始日期。

然后在A2中使用数组公式:

=MIN( IF((A1+ROW(INDIRECT("1:7"))<>EOMONTH(A1,0))*((WEEKDAY(A1+ROW(INDIRECT("1:7")))=3)+(WEEKDAY(A1+ROW(INDIRECT("1:7")))=5)+(WEEKDAY(A1+ROW(INDIRECT("1:7")))=6)),A1+ROW(INDIRECT("1:7"))))

作为数组公式,需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter来确认。如果操作正确,那么Excel会将{}放在公式周围。

或者你可以在A2中使用这个非CSE公式,不需要Ctrl-Shift-Enter:

=AGGREGATE(15,6,(A1+ROW(INDIRECT("1:7")))/(((WEEKDAY(a1+ROW(INDIRECT("1:7")))=3)+(WEEKDAY(a1+ROW(INDIRECT("1:7")))=5)+(WEEKDAY(a1+ROW(INDIRECT("1:7")))=6))*(A1+ROW(INDIRECT("1:7"))<>EOMONTH(A1,0))),1)

根据需要格式化A2。然后复制

![enter image description here

答案 1 :(得分:2)

替代解决方案:

在单元格A1中,输入开始日期(2017年6月27日,使用您的示例)

在单元格A2中并向下复制,使用以下公式:

=LOOKUP(2,1/(((WEEKDAY(A1+{7,6,5,4,3,2,1})=3)+(WEEKDAY(A1+{7,6,5,4,3,2,1})=5)+(WEEKDAY(A1+{7,6,5,4,3,2,1})=6))*(A1+{7,6,5,4,3,2,1}<>EOMONTH(A1,0))),A1+{7,6,5,4,3,2,1})