分享

【Excel问伊答69】NETWORKDAYS,神器!!!计算两个日期间的休息天数或工作天数

 fzchenwl 2015-04-07

有个微信朋友问,两个日期之间的休息天数如何求?这是人力资源薪酬计算时常见问题,想必她是一个HR吧。


我告诉她可以用NETWORKDAYS来解决。


早在office 2003时代,Excel就内置了一个非常强大实用的时间日期计算函数networkdays(需要加载分析工具库方可使用),利用这个函数可以很方便的计算任意两个日期之间存在多少个工作日。2007及以上版本默认就有这个函数了。2010版本又增加了一个与networkdays相似的函数叫NETWORKDAYS.INTL,这个新增函数的功能跟networkdays类似,都是用来计算两个日期之间完整的工作日天数,不过NETWORKDAYS.INTL函数提供了一个可以人为指定一周里哪些天是工作日的参数。


  • NETWORKDAYS语法结构:


NETWORKDAYS(开始日期,结束日期,[假日列表])


第3个参数假日列表可省略



NETWORKDAYS.INTL语法结构:


NETWORKDAYS.INTL(开始日期,结束日期,[周末],[假日列表])


第3、4个参数可省略

其中,第3个参数表示介于 start_date 和 end_date 之间但又不包括在所有工作日数中的周末日。 该参数是一个用于指定周末日的周末数字或字符串。


关于“用于指定周末日的周末数字”见下表所示:

周末数周末日
1 或省略星期六、星期日
2星期日、星期一
3星期一、星期二
4星期二、星期三
5星期三、星期四
6星期四、星期五
7星期五、星期六
11仅星期日
12仅星期一
13仅星期二
14仅星期三
15仅星期四
16仅星期五
17仅星期六


关于“用于指定周末日的周末字符串”,需要解释下:

周末字符串值的长度为七个字符,并且字符串中的每个字符表示一周中的一天(从星期一开始)。 1 表示非工作日,0 表示工作日。 在字符串中仅允许使用字符 10

比如,

'0000000',表示一周都是工作日

'0000001',表示周日才是休息日

'0000011',表示周六周日是休息日

.........

'0010100',表示周三周五是休息日

'1100000',表示周一周二是休息日

'1111111',表示一周都是休息日


  • 下面具体举例说明:


统计2013年10月1日到当月月底的工作日天数(不考虑国庆等假日)或休息日天数


不考虑假日的工作日天数公式:

=NETWORKDAYS(A1,A2)=23


不考虑假日的休息日天数公式:

=(A2-A1+1)-NETWORKDAYS(A1,A2)=8





其实在10月份正好有个国庆节(10月1日到10月4日)。如果要考虑假日因素,该怎么求工作日天数和休息日天数呢?


考虑假日的工作日天数公式:

=NETWORKDAYS(A1,A2,D1:D4)=19



也可以直接把假日列表写在NETWORKDAYS的第3个参数里,如下:

=NETWORKDAYS(A1,A2,{'13-10-01';'13-10-02';'13-10-03';'13-10-04'})

=NETWORKDAYS(A1,A2,{41548;41549;41550;41551})



考虑假日的休息日天数公式:


=A2-A1+1-NETWORKDAYS(A1,A2,$D$1:$D$4)=12



  • 周末不是周六周日,而是其他日子,怎么计算工作日天数?


下面是一个网友问的问题:

我是想拿NETWEEKDAY来算请假天数的,本公司只休息星期天,而NETWEEKDAY是默认除去双休日,通常我只能用笨办法手工加上星期六,但是容易出错,效率也低。 如果能编出两个日期中间只除去星期日而返回全部的工作日是最好不过了。 


这是一个比较有趣的问题,不少公司确实不是周六周日休息的,而是周日休息一天,还有的周五休息一天,更有甚者周一和周五各休息一天。针对这些特殊情况,该如何计算每月的工作日天数、休息日天数呢?


网络上百度有个这样的函数是可以用来求类似情况的:

=SUMPRODUCT((MOD(ROW(INDIRECT(A1&':'&A2)),7)={0,1})*1)

上面这个函数公式是用来求两个日期(2013年10月1日到2013年10月31日)之间的休息日天数(不考虑国庆假日情况下)。


但是这样的函数公式毕竟比较复杂不是。


2010版本里提供的NETWORKDAYS.intl可以解决上面那个网友的特殊问题的。

假设这个网友要计算2013年10月份的工作日天数和休息日天数(考虑国庆节)。公司采取的是周日休息的工作制度。


=NETWORKDAYS.INTL(A1,A2,11,$D$1:$D$4)=23


其中,第3个参数为“11”,代表周末仅指周日。


当然该函数公式可以写成:


=NETWORKDAYS.INTL(A1,A2,'0000001',$D$1:$D$4)



-------------------------------------------------------------------------------------------


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多