【问题标题】:How to count all holidays between two dates, excluding those that fall on a weekend - Excel如何计算两个日期之间的所有假期,不包括周末的假期 - Excel
【发布时间】:2017-01-28 14:27:22
【问题描述】:

我可以像这样计算两个日期之间的假期数量:

=COUNTIFS($T$47:$T$57,">="&F59,$T$47:$T$57,"<="&G59)

值 $T$47:$T$57 是我的假期日期所在的单元格。 F59 是开始日期。 G59 是结束日期。

所以基本上这就是计算我的假期在开始和结束日期内发生了多少次

--eg-- 开始日期 = 11/24/2016,结束日期 = 11/30/2016 返回 2(感恩节和黑色星期五,星期四和星期五) .

但是,当谈到今年的圣诞节之类的事情时,我遇到了麻烦。平安夜、圣诞节和圣诞节后的第二天算作假期,但分别发生在周六、周日和周一。我不想计算周末的假期,所以我想要的回报是 1。但是,使用我的公式,我目前得到的回报是 3。

如何在这个问题中排除周末?

如果有任何不清楚的地方,请告诉我。谢谢!

【问题讨论】:

  • 是否允许在 $T 旁边添加一列以 1 到 7 之间的数字表示日期的星期几?
  • 您是否考虑过将Weekday 公式合并到您的表格中?使用公式 =MOD(WEEKDAY(cell), 7)
  • @MikeD 这应该不是问题。但是,由于我的日期本身是一个公式而不是硬编码的日期,因此它们需要与之对应。元旦是这样的 '=DATE(T46,1,1)' 和劳动节是这样的 '=DATE(T46,9,1)+CHOOSE(WEEKDAY(DATE(T46,9,1)),1,0 ,6,5,4,3,2)'
  • @Clusks 我在工作日尝试过,但不知道该怎么做。我需要返回一个数字值而不是布尔值。如果没有一大堆星期四 = 真、星期五 = 真、星期六 = 假等的列表,我该如何让每一天成为真/假。这是我的两难选择。
  • 通过 WEEKDAY() 值计算所有落在工作日 SAT/SUN 的日期,然后从总计数中减去...

标签: excel excel-formula


【解决方案1】:

一种可能性是添加一个工作日编号(例如,我使用=WEEKDAY(date, 2),SAT/SUN 分别为 6 和 7 号(只是为了满足我从星期一开始一周的惯例)。

此外,我使用了 4 个和'ed 条件,前 2 个处理 B 列的开始和结束日期 - 就像你所拥有的那样,第二个消除(从 C 列的新范围)数字 6 和 7 的工作日。

也应该适用于您的列表...

其他选项包括创建一个数组公式或一个条件乘以 1 的 sumproduct(1 或 0 - 取决于工作日)

【讨论】:

  • 这似乎是我需要的。现在,我只是想把它整合到我的公式中。该公式如何知道从 WEEKDAY() 中取 &6 和 &7? ps 我给了你一个赞成票,但它没有显示,因为我的声望点很低。我对 StackOverflow 很陌生。我一定会帮助别人,就像你帮助我一样。谢谢!
  • 查看(新)计数的条件 #3 和 4 ... weekdayrange,""&6,weekdayrange,""&7 将抑制 SAT 和 SUN ... 如果您认为你喜欢这个答案,请接受它......它也会给你一个赏金和更多的代表
【解决方案2】:

考虑以下UDF()

Public Function KountHolidays(Hlist As Range, fDate As Date, lDate As Date) As Long
    Dim d As Date
    For d = fDate To lDate
        ds = Format(d, "dddd")
        If ds <> "Sunday" And ds <> "Saturday" Then
            For Each r In Hlist
                If r.Value = d Then
                    KountHolidays = KountHolidays + 1
                End If
            Next r
        End If
    Next d
End Function

对于完全任意的假期:

这种方法的巧妙之处在于,您可以轻松地将其适应多年。

【讨论】:

    【解决方案3】:

    这可以通过NETWORKDAYSNETWORKDAYS.INTL 函数轻松完成,方法是从没有指定假期的减一。

    =NETWORKDAYS(A2, B2)-NETWORKDAYS(A2, B2, $Z$2:$Z$6)
    

    $Z$2:$Z$6 的假期范围可以通过创建一个名为 holidays 的命名范围来动态化,其中 指的是:

    =Sheet1!Z2:INDEX(Sheet1!Z:Z, MATCH(1e99, Sheet1!Z:Z))
    

    用作,

    =NETWORKDAYS(A2, B2)-NETWORKDAYS(A2, B2, holidays)
    

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      相关资源
      最近更新 更多