我必须构建一个包含两个不同日期列的报告;上个月的MF,上个月的TS。
如果在 AI 列中有上个月所有日期的列表
A
1 | 8/1/2013 |
2 | 8/2/2013 |
...
31 | 8/31/2013 |
是否有可以在 B 列和 C 列中使用的公式来获取必要的日期?
我必须构建一个包含两个不同日期列的报告;上个月的MF,上个月的TS。
如果在 AI 列中有上个月所有日期的列表
A
1 | 8/1/2013 |
2 | 8/2/2013 |
...
31 | 8/31/2013 |
是否有可以在 B 列和 C 列中使用的公式来获取必要的日期?
好吧,当然,您可以使用此公式来避免日期之间的空白单元格:
=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!
您可以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
您可以执行以下操作,而不是在 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 月引入适当的日期。