本文提供了一个公式,能够计算多种情形下某个月的工作日天数,如下所示。
单元格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可指定下表中的值:
参数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将认为周一、周三、周五是周末。