在excel中,将两个日期值进行减法运算,可以得到这两个日期之间所间隔的具体天数。然而,这一功能在实际工作中存在局限性,无法满足更高层次的需要,特别是“工作日”这一概念逐渐在各领域被广泛应用的今天,许多工作都需要进行与之相关的计算。最常见的比如员工的出勤天数、交货期的计算、付款日的计算等等。如图 190‑1所示为某企业2010年6月离职员工统计表,如何按5天工作制计算离职员工最后一个月的实际工作天数?

图190‑1离职末月工作日天数计算

解决方案

使用NETWORKDAYS.INTL 函数计算两个日期之间的工作日天数。

操作方法

选择E3:E10单元格区域,输入下列公式,按<Ctrl+Enter>组合键结束。

=NETWORKDAYS.INTL(MAX(C3,EOMONTH(D3,-1)+1),D3,1)

原理分析

NETWORKDAYS.INTL函数计算任意工作日

1.首先使用EOMONTH函数推算离职生效日期上个月的月末日期,再加1,得出离职月的月初日期。

2.使用MAX提取入职日期和离职月初日期的最大值,得出离职员工在最后一个月的起始工作日期。

3.使用NETWORKDAYS.INTL 函数计算最后一个月的起始工作日期与离职生效日期之间的工作日数,即可得出离职员工最后一个月的实际工作天数。

NETWORKDAYS.INTL 函数用于返回两个日期之间的所有工作日数,使用参数指示哪些天是周末,以及有多少天是周末。周末和任何指定为假期的日期不被视为工作日。语法如下:

NETWORKDAYS.INTL(start_date,end_date, [weekend], [holidays])

其中,第1、2参数start_date 和 end_date为要计算其差值的起始、终止日期。start_date 可以早于或晚于 end_date,也可以与它相同,如果起始日期晚于终止日期,则计算结果为负数。

第3参数weekend为用于指定周末时间的数值或字符串,如表格 190‑1所示。weekend 字符串值为 7 个字符长,该字符串中的每个字符代表一周中的一天,从星期一开始。1 代表非工作日,0 代表工作日。该字符串中只允许使用字符 1 和 0。例如以下3个公式都可以求出A1、B1两个日期间除了周六、周日外的工作日天数:

=NETWORKDAYS.INTL(A1,B1)

=NETWORKDAYS.INTL(A1,B1,1)

=NETWORKDAYS.INTL(A1,B1,”0000011″)

第4参数holidays为包含一个或多个指定为“节假日”的日期的可选集合,这些日期将从工作日日历中排除。假期应该是包含日期的单元格区域,也可以是代表这些日期的序列值的数组常量。假期中的日期或序列值的顺序可以是任意的。当“节假日”与指定的“周末日”重复时,该函数仅计算1次。