如何计算两个date之间的所有假期,不包括那些周末的假期 – Excel

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

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

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

所以基本上这是做了多less次我的假期发生在开始和结束date

–eg– 开始date= 11/24/2016,结束date= 11/30/2016返回2(感恩节和黑色星期五,周四和周五)。

然而,今年圣诞节的时候,我遇到了麻烦。 圣诞节前夕,圣诞节和圣诞节后的第二天分别计为假期,但分别在星期六,星期天和星期一发生。 我不想计算一个周末的假期,所以我想要的回报是1.但是,使用我的公式,我目前正在返回3。

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

如果有什么不清楚,请告诉我。 谢谢!

一种可能性是添加星期几数字(例如,我使用=WEEKDAY(date, 2) ,SAT / SUN分别是数字6和7(只是为了讨论我周一开始的一周的约定)。

此外,我使用了4个条件,前两个处理B列的开始date和结束date – 就像您一样,第二个两个删除(从C列的新范围)平日与数字6和7。

在这里输入图像说明

应该为你的清单工作…

其他选项包括创build一个数组公式或一个条件的1倍的副产品(1或0 – 取决于工作日)

这可以通过NETWORKDAYS或NETWORKDAYS.INTL函数轻松地完成,通过从一个没有指定假期减去一个。

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

networkdays_intl_elapsed_2

假期的$Z$2:$Z$6范围可以通过创build一个名为“ holidays指的是:

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

用于,

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

考虑下面的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 

对于完全任意的假期:

在这里输入图像说明

关于这种方法的整洁的事情是,你可以很容易地适应多年。