0

我必须构建一个包含两个不同日期列的报告;上个月的MF,上个月的TS。

如果在 AI 列中有上个月所有日期的列表

         A
1  |  8/1/2013  |
2  |  8/2/2013  |
       ...
31 |  8/31/2013 |

是否有可以在 B 列和 C 列中使用的公式来获取必要的日期?

4

3 回答 3

2

好吧,当然,您可以使用此公式来避免日期之间的空白单元格:

=IFERROR(INDEX($A$1:$A$31,SMALL(IF(MOD($A$1:$A$31,7)>1,ROW($A$1:$A$31,9^99),ROW())),"")

这个公式(周一到周五)需要用Ctrl+ Shift+调用Enter。第一次约会后,您可以向下拖动到底部。

对于周二到周六的,时间稍长一些;

=IFERROR(INDEX($A$1:$A$31,SMALL(IF(((MOD($A$1:$A$31,7)>2)+(MOD($A$1:$A$31,7)=0))>0,ROW($A$1:$A$31),9^99),ROW())),"")

但同时,您必须使用Ctrl++调用此函数,否则,您将无法获取其他日期(您将获得其他日期Shift)。Enter#NUM!

于 2013-09-03T16:06:52.943 回答
2

您可以WORKDAY为此使用函数:

鉴于您在 A1 中已经有上个月的第一天,将这个公式放入 B1

=WORKDAY(A$1-1,1)

.....还有这个在C1

=WORKDAY(A$1-2,1)+1

然后在 B2....

=IF(B1="","",IF(MONTH(WORKDAY(B1,1))=MONTH(A$1),WORKDAY(B1,1),""))

在 C2 中

=IF(B1="","",IF(MONTH(WORKDAY(B1-1,1)+1)=MONTH(A$1),WORKDAY(B1-1,1)+1,""))

并将后两个公式复制到第 23 行

当月份中的MF天或TS天少于 23天时,最低的单元格将显示为空白。

如果您想排除列出的假期日期,您也可以使用 WORKDAY

于 2013-09-03T17:44:53.840 回答
2

您可以执行以下操作,而不是在 A 列中输入日期:

上个月的星期几

在单元格 B1 中是这个公式(格式为 m/d/yyyy):

=TODAY()

在单元格 B2 中是这个公式(格式为 mmmm):

=DATE(YEAR(B1),MONTH(B1)-1,1)

在单元格 A5 中是这个公式(格式为 m/d/yyyy):

=IF(WEEKDAY(B2,2)<6,B2,B2+1+(WEEKDAY(B2+1,2)>5))

在单元格 A6 中并向下复制到 A37 是这个公式(格式为 m/d/yyyy):

=IF(NETWORKDAYS(B$2,EOMONTH(B$2,0))>COUNT(A$5:A5),A5+1+2*(WEEKDAY(A5+1,2)>5),"")

在单元格 B5 中是这个公式(格式为 m/d/yyyy):

=IF(AND(WEEKDAY(A5,2)<>{1,7}),B2,B2+1+(OR(WEEKDAY(B2+1,2)={1,7})))

最后,在单元格 B6 中复制到 B37 是这个公式(格式为 m/d/yyyy):

=IF(B5="","",IF(MONTH(B5+1+OR(WEEKDAY(B5+1,2)={1,7})*2)<>MONTH(B$2),"",B5+1+OR(WEEKDAY(B5+1,2)={1,7})*2))

现在,只要您输入新月份,MF 和 TS 日期就会自动更新。如果您想手动控制它,您只需在单元格 B1 中输入月份日期,例如 2013 年 8 月 1 日。然后公式将处理其余部分,并将从 7 月引入适当的日期。

于 2013-09-03T16:27:29.850 回答