【问题标题】:Exclude weekends from dynamic range of dates从动态日期范围中排除周末
【发布时间】:2013-03-01 05:56:11
【问题描述】:

我为表示列表中日期数组的动态范围构建了一个 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

这是我的动态范围。日历!$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 周前的星期五。如何使动态范围不包括周末?

【问题讨论】:

  • 我无法更改源工作表的布局,但我可以将包含周末值的单元格设为空白。不知道这有多大帮助。我尝试在 OFFSET 函数上使用 IF 周末日期然后 "" 条件,这确实有效,但它会在数组中留下空白单元格,而不是将列合并到一个一致的流
  • 只是想,用na() 代替"" 怎么样,或者你可以用三个偏移函数代替一个来消除周末?
  • 实际上,我只是删除了所有的周末日期。不想碰它们,因为它会毁掉另一张纸,但我改变了那张纸上的公式,现在我的两张纸都可以工作了。回应您的评论:我不相信动态范围可以是一组串联的偏移函数。至于 NA(),它将像空白一样工作,即周末日期将被输出数组中的 NA() 替换。虽然我找到了解决方法,但我仍然热衷于寻找解决方案。
  • 我不在我的电脑前,但我很想尝试一些事情......
  • 如果你找到解决方案我会很高兴的!

标签: excel dynamic range date-range


【解决方案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 是所需的结束日期 - 我可以提供更多详细信息如果你想追求那种方法.....

【讨论】:

  • INDIRECT("1:30") 元素是如何工作的?公式对我不起作用,而且我看不出它如何识别某些日期重复多次的周。
  • 好的 - 我的错误 - 我没有注意到重复的日期,所以他们需要从列表中取出但没有 Sats 和 Suns? ROW(INDIRECT("1:30")) 只是生成一个数字 1 到 30 的数组,假设您想要 30 个日期(周一至周五 6 周),但如果您有重复,那就没有意义了......
  • 不幸的是,有重复的日期,因此需要提取所有非周六和周日的日期。
  • 好的,谢谢,我编辑了我的回复,展示了一个通用的方法
猜你喜欢
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 2016-03-20
  • 2018-06-01
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
相关资源
最近更新 更多