2

我已经为表示列表中日期数组的动态范围构建了一个 OFFSET 公式。根据今天的日期,它采用从 X 周前的星期一开始到 Y 周前的星期五的日期。除了我想从我的数组输出中排除周末日期之外,一切都很愉快。

我的原始数据有时会出现多次日期,即

04/03/2013 = Mo
05/03/2013 = Tu
06/03/2013 = We
06/03/2013 = We
07/03/2013 = Th
08/03/2013 = Fr
09/03/2013 = Sa
10/03/2013 = Su
11/03/2013 = Mo
12/03/2013 = Tu

这是我的动态范围。Calendar!$D:$D 是找到上述格式的所有日期的位置。

=OFFSET(Calendar!$D$1,MATCH(TODAY()+1-WEEKDAY(TODAY(),2)-14,Calendar!$D:$D,0)-1,0,MATCH(TODAY()+28-WEEKDAY(TODAY()+1),Calendar!$D:$D,0)-MATCH(TODAY()+1-WEEKDAY(TODAY(),2)-14,Calendar!$D:$D,0)+1)

给定今天的日期,它会找到两周前的星期一,然后将范围扩大到 3 周前的星期五。如何使动态范围不包括周末?

4

1 回答 1

1

您实际上并不需要日期列表 - 此公式将生成相同的日期数组(仅限周一至周五),而无需参考工作表列表

=WORKDAY(TODAY()-WEEKDAY(TODAY(),2)-14,ROW(INDIRECT("1:30")))

适用于 Excel 2007 或更高版本

鉴于您在下面的评论,我认为上述方法不起作用,因此从两个日期之间的列表中提取工作日的替代方法可以像这样工作:

=SMALL(IF((Range>=Start)*(Range<=End)*(WEEKDAY(Range,2)<6),Range),ROW(INDIRECT("1:"&SUM((Range>=Start)*(Range<=End)*(WEEKDAY(Range,2)<6)))))

这将按升序为您提供所有工作日(无论列表中的顺序如何),其中 Range 是您的日期列表,Start 是所需的开始日期,End 是所需的结束日期 - 如果您愿意,我可以提供更多详细信息追求那个方法......

于 2013-03-13T16:39:57.330 回答