炮击白宫的电影:用Excel自定义函数计算工作日1

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 05:49:05
用Excel自定义函数计算工作日 文章来源:PCM    作者:其他   2006-10-20

    在Excel中,通过将两个日期值进行减运算,可以得到这两个日期相隔的天数;而将一个日期值与一个表示天数的整数相加减,则可以得到一个相隔该整数代表的天数的日期,这是Excel提供的虽然简单却相当实用的日期计算功能。然而,该功能在实际应用中的局限性,使其无法满足更高层次的需要,特别是“工作日”这一概念逐渐在各领域广泛应用,许多工作都需要进行与之相关的计算。最常见的譬如员工的出勤天数、交货期的计算、付款日的计算等等。本文介绍了Excel自带的用于计算工作日的NETWORKDAYS和WORKDAY函数,并指出了这两个函数在实际应用中所存在的问题,同时给出了用Excel自定义函数进行相关计算的实现。

Excel自带的工作日计算函数

Excel中自带的工作日计算函数在“分析工具库”中,要使用该类函数必须选择“加载宏”命令安装“分析工具库”。

▲NETWORKDAYS函数
NETWORKDAYS函数的用途是返回两个日期值之间完整的工作日数值,此工作日数值不包括周末(周六和周日)和用户专门指定的假期。
1.语法形式
NETWORKDAYS(start_date,end_date,holidays)
2.参数说明
start_date :开始日期。
end_date :终止日期。
holidays :表示不在工作日历中的一个或多个日期所构成的可选数据清单,如国家规定的法定假日以及其他非法定假日。此参数可以是包含日期的单元格区域,也可以是由代表日期的系列数所构成的数组常量。

▲WORKDAY函数
WORKDAY函数是用来计算某日期(起始日期)之前或之后相隔指定工作日数的某一日期的日期值。
1.语法形式
WORKDAY(start_date,days,holidays)
2.参数说明
start_date:开始日期。
days:为 start_date之前或之后不含周末及节假日的天数。days为正值将产生未来日期;为负值产生过去日期。
holidays:为可选的数据清单,表示需要从工作日历中排除的日期值,如国家规定的法定假日或非法定假日。此参数可以是包含日期的单元格区域,也可以是由代表日期的系列数所构成的数组常量。

用Excel自定义函数实现工作日计算

值得注意的是,在实际应用中,对于元旦、春节、五一、国庆等,由于节假日调整的原因,有些周末也有可能被安排为工作日,因此在计算时也应该包括在工作日内。显然,Excel自带的两个工作日计算函数没有考虑到这一点,实际计算时必然会带来误差。因此有必要用Excel中的VBA重新设计两个对应的自定义函数,用以准确计算工作日。为了与Excel自带的工作日计算函数相对应,这两个自定义函数的参数采用了与前者类似的形式。由于除周末外,其间可能还有国家法定的节假日,实际计算工作日数时要把这些节假日排除在外。为此在设计时使用了参数holidays来存放计算范围内的所有法定节假日,并据此检查以确定每个日期是不是工作日。另外,增加一个新的参数nonholidays,对应的是一个Excel中的区域,用以存放被调整为工作日的周末的日期,并据此检查以确定每个日期是否非工作日。这两个自定义函数的具体代码如下,并以2006年春节期间的节假日为例计算此范围内的工作日数。