Excel公式技巧35: 计算工作日天数

本文提供了一个公式,能够计算多种情形下某个月的工作日天数,如下图1所示。

图1

单元格C2中的公式为:

=MAX(0,NETWORKDAYS(MAX($A2,C$1),MIN($B2,EOMONTH(C$1,0))))

向右拖至F列,向下拖至第8行。

NETWORKDAYS函数的语法为:

NETWORKDAYS(start_date,end_date, [holidays])

其中,参数start_date必需,指定开始日期;参数end_date必需,指定结束日期;参数holidays,可选,指定要排除的日期。

因此,参数start_date是公式中的:

MAX($A2,C$1)

获得开始日期和当前月首日中较大的值。

参数end_date是公式中的:

MIN($B2,EOMONTH(C$1,0))

其中的EOMONTH(C$1,0)获取当前月最后一天的日期值,因此获取结束日期和当前月最后一天日期值中的较小值。

这样,将本月中的开始和结束日期就确定了,传递给NETWORKDAYS函数得到当月工作日天数。

在第9行中,我们将假期排除在外,单元格C9中的公式为:

=MAX(0,NETWORKDAYS(MAX($A9,C$1),MIN($B9,EOMONTH(C$1,0)),$B$13:$B$15))

向右拖至F列。

公式中添加了NETWORKDAYS函数的可选参数holidays,将指定的日期排除。

在Excel 2010中,Microsoft引入了一个新函数NETWORKDAYS.INTL,增加了能够自定义周末日期的功能。其语法为:

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

其中,参数weekend可指定下表中的值:

图2

参数weekend也可以指定由0和1组成的7个字符长的字符串,其每个字符代表一周中的某一天,从周一开始。1代表该天是非工作日,0代表工作日。例如,0000011表示周末是周六和周日。注意,在字符串中只能有1和0,且使用1111111将总是返回0。

对于我们所举的示例来说,如果在单元格C9中输入公式:

=MAX(0,NETWORKDAYS.INTL(MAX($A9,C$1),MIN($B9,EOMONTH(C$1,0)),6, $B$13:$B$15))

Excel将会认为周四和周五是周末。

使用公式:

=MAX(0,NETWORKDAYS.INTL(MAX($A9,C$1),MIN($B9,EOMONTH(C$1,0)),"1010100", $B$13:$B$15))

Excel将认为周一、周三、周五是周末。