1

我有一个数据表,其中包含任务的开始日期和结束日期列表。我需要计算开始日期和结束日期之间有多少天是我们圣诞假期的一部分(12 月 11 日至 1 月 7 日)

例如,当开始日期是 10/12/2012 并且结束日期是 12/01/2013 时,有 28 天在这些日期之间。当开始日期为 2012 年 12 月 15 日且结束日期为 2013 年 3 月 12 日时,这些日期之间有 22 天。如果开始日期是 2012 年 10 月 12 日,结束日期是 2014 年 1 月 12 日,则有 56 天在这些日期之间(因为该范围有两年)。

由于我已经设定了要求,我需要使用公式来执行此操作。最初,我决定使用圣诞节(12 月 25 日)发生的次数,并计算每次发生 4 周。

我使用的公式是

=FLOOR((E12-A25)/365,1)+IF(OR(MONTH(E12)=12,
       MONTH(A25)=12),
       IF(AND(DAY(A25)<=25,DAY(E12)>=25),1,0),
       IF(OR(MONTH(A25)>=12,
       IF(MONTH(E12)<MONTH(A25),
          MONTH(E12)+12,
          MONTH(E12))>=12),1,0))*28

但显然,如果范围开始和结束日期介于这两个日期之间,这将无济于事。

有什么建议么?我在死胡同

4

2 回答 2

0

您在第二个示例中的日期数学是错误的——该范围内有 24 天,而不是 22 天。

我可以带你去那里度过一个假期:

让:

  • A1 包含假期开始(2012 年 12 月 11 日)
  • A2 包含假期结束(2013 年 1 月 7 日)
  • B1 包含开始日期
  • B2 包含结束日期

公式:

=MAX(MIN(A2+1,B2+1),A1) - MIN(MAX(A1,B1),A2+1)

该公式基本上找到重叠的日期范围,如果有的话,然后减去以获得整天数。“+1”是因为您的“结束日期”实际上是包含在内的,因此对于日期数学,您需要让假期结束于 1 月 8 日,而不是 1 月 7 日,以捕捉最后一天。

但这仅适用于一年的假期。您可以将假期范围存储在其他单元格中,并使用相同的公式并将它们全部相加,但您将受限于您设置的年限。

于 2012-12-19T07:18:28.953 回答
0

此公式将计算任何日期范围内的 12 月 11 日至 1 月 7 日之间的日期,甚至跨多年

=SUMPRODUCT((TEXT(ROW(INDIRECT(B1&":"&B2)),"mmdd")+0>=1211)+(TEXT(ROW(INDIRECT(B1&":"&B2)),"mmdd")+0<=107))

您的开始日期在 B1 中,结束日期在 B2 中

这会将范围内的每个日期转换为一个数字,例如 12 月 1 日变为 1201,3 月 4 日变为 304,然后它计算那些大于或等于 1207(12 月 7 日)或小于或等于 107(1 月 7 日)的日期,所以这将为您的最后一个示例提供 56

如果您从每个日期减去 7(以 1 月 7 日为结束日期),您可以缩短公式,然后您只需要检查结果数字是否 >= 1204,即

=SUMPRODUCT((TEXT(ROW(INDIRECT(B1-7&":"&B2-7)),"mmdd")+0>=1204)+0)

.....第三个选项也应该给出相同的结果,更接近于richardtallent的方法 - 获取年数并乘以28,然后根据开始/结束日期调整数字

=(YEAR(B1-7)-YEAR(B2-7)+1)*28-MAX(0,B2-DATE(YEAR(B2-7),12,11))-MIN(28,DATE(YEAR(B1-7)+1,1,7)-B1)

于 2012-12-19T13:17:01.000 回答