excel净工作日函数networkdays,遇到法定节假日与例休重复,是如何计算净工作日的?

在计算净工作日时,通常需要减去法定节日及周末双休日,但若遇到法定节日跟双休日重叠时,用networkdays函数是不会进行顺延,只按照指定的日期进行计算的,那请问该如何写函数才能得出正确的净工作日天数呢?
例如:
列 行 A B C D
1 2010-10-1 开始日期
2 2010-10-31 结束日期
3 2010-10-1 休息日 法定节日 全休
4 2010-10-2 法定节日、周六 全休
5 2010-10-3 法定节日、周日 全休
6 2010-10-9 周六 全休
7 2010-10-10 周日 全休
8 2010-10-16 周六 全休
9 2010-10-17 周日 全休
10 2010-10-23 周六 全休
11 2010-10-24 周日 全休
12 2010-10-30 周六 全休
13 2010-10-31 周日 全休

2、如果在计算净工作日时,公司规定周六只休半天,周日全休,那如何计算净工作日?
列 行 A B C D
1 2010-10-1 开始日期
2 2010-10-31 结束日期
3 2010-10-1 休息日 法定节日 全休
4 2010-10-2 法定节日、周六 全休、休半天
5 2010-10-3 法定节日、周日 全休
6 2010-10-9 周六 休半天
7 2010-10-10 周日 全休
8 2010-10-16 周六 休半天
9 2010-10-17 周日 全休
10 2010-10-23 周六 休半天
11 2010-10-24 周日 全休
12 2010-10-30 周六 休半天
13 2010-10-31 周日 全休

NETWORKDAYS函数不会重复计算周末与法定节假日的。
比如A1是开始日期、A2是结束日期,A3:A5是法定节假日10月1、2、3日,则用=NETWORKDAYS(A1,A2,A3:A5),其中如果A3:A5的日期是周末,不会被重复计算。

如果周六休半天的话,上面结果还需要加上期间周六的天数/2并扣去法定节假日中的周六。
=NETWORKDAYS(A1,A2,A3:A5)-SUMPRODUCT((MOD(ROW(INDIRECT(A1&":"&A2)),7)=0)*(COUNTIF(A3:A5,ROW(INDIRECT(A1&":"&A2)))=0))/2

壁立千寻敢登攀,寻根究底解疑难——更多精彩,尽在“EXcel疑难千寻千解”,欢迎到我的百度文库下载电子版样章。 http://wenku.baidu.com/view/64cc998371fe910ef12df8a3.html
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-24
特殊假日的处理

虽然说直接应用networkdays()函数并不能得到正确的工作日天数,但我们还是可以通过对此函数的变化来得到。图3是我们的范例,演示了如何一步一步逼近我们的目标。

第一步:将A列定义为月份。选中A列,在右键菜单中选择“设定单元格格式”,在“数字”标签中选择“分类”为“自定义”,“类型”中输入“yyyy-mm”格式,单击“确定”按钮退出。

第二步:设计B列公式。先直接用networkdays()函数计算只考虑本月除去双休日后的天数。虽然可直接使用该函数,但需要知道每月的开始日期和终止日期。开始日期当然是每月的1日,用“date(year(A2),month(A2),1)”表示就OK了。结束日期应当是每月的最后一天,这就有些难度了,究竟是30日、31日还是28日、29日?需要一个复杂的判断关系。这里我们采用了一个变通的办法,就是当月的最后一天其实就是下月的第一天再减去1天,所以我们可以用“date(year(A2),month(A2)+1,1)-1”来表示。于是B2的公式就有了:“=networkdays(date(year(A2),month(A2),1),date(year(A2),month(A2)+1,1)-1)”。追问

这个方法我在excel home里面见过,不过不是这两个问题的解决方法。谢谢。

相似回答