ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 11413|回复: 14

[原创]计算扣除任意时间段及派生的求工作日的自定义函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-12-8 09:35 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

自定义了一个使用比networkdays()函数更加方便的计算工作日的函数workdays(x,y,Optional z)及派生的求n个工作日后日期的函数workdate(x,y,Optional z)(x为起始日,y为工作日数,z为自定义假期.

'z可以输入星期值和/或日期值,可以输入星期范围或任期范围,日期范围可以输入一次性日期段或重复性日期段(如节日)

缺省z表示扣除法定除春节外节日(即1月1日,5月1日~3日,10月1日~3日)及星期六、日

输入格式为,范围以短划线"-"表示,直接输入数字表示星期值,日期分隔符必须为"."且从左至右为年月日顺序排列,如果日期段与星期值重合希望只扣1次则在最后加上字母y作为标识符,否则不加任何字符
举例说明 求2001年1月1日~2006年12月8日时间段扣除星期六、星期日、每年1月1日(节日重复扣)、2005年3月1日-4日(只扣1次)、2005年5月1日~3日(节日重复扣)后的剩余天数可写为以下形式
写法1  =workdays("2001/1/1","2006/12/8",{6,7,"1.1","2005.3.1-4y","2005.5.1-3"})
写法2  =workdays("2001/1/1","2006/12/8",{"6-7","1.1","2005.3.1-3.4y","2005.5.1-5.3"})
写法3  =workdays("2001/1/1","2006/12/8",{"6-7","1.1","2005.3.1-2005.3.4y","2005.5.1-2005.5.3"})

附件为函数加载宏 

LCuxLpXW.rar (18.53 KB, 下载次数: 221)
[此贴子已经被作者于2006-12-11 22:21:33编辑过]

9aAzG63o.rar

15.91 KB, 下载次数: 163

[原创]计算2个日期之间扣除任意时间段的自定义函数

lrCRWXMV.rar

16.81 KB, 下载次数: 156

[原创]计算扣除任意时间段及派生的求工作日的自定义函数

sSTY3nZe.rar

14.81 KB, 下载次数: 144

[原创]计算扣除任意时间段及派生的求工作日的自定义函数

TA的精华主题

TA的得分主题

发表于 2006-12-9 16:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好,收藏了。谢谢楼主分享!

TA的精华主题

TA的得分主题

发表于 2006-12-9 23:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-12-11 12:40 | 显示全部楼层

好象有点错误啊,添加节日后会出错(天数+1),每添一次,就多+1天

开始日期结束日期工作日
2006年12月29日2007年1月4日3

公式=workdays(H2,I2,{"6-7","1.1-1.3","5.1-5.3","10.1-10.3","2007.2.18-2.20"})

H2是开始日期,I2是结束日期

12-30和12-31是双休,2007.1.1-1.3是节假日,应该是两天的,怎么就是三天,如果取消了"2007.2.18-2.20" 就变成2天,公式正确。

请斑竹修改一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-12-11 16:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用1851244在2006-12-11 12:40:20的发言:

好象有点错误啊,添加节日后会出错(天数+1),每添一次,就多+1天

开始日期结束日期工作日
2006年12月29日2007年1月4日3

公式=workdays(H2,I2,{"6-7","1.1-1.3","5.1-5.3","10.1-10.3","2007.2.18-2.20"})

H2是开始日期,I2是结束日期

12-30和12-31是双休,2007.1.1-1.3是节假日,应该是两天的,怎么就是三天,如果取消了"2007.2.18-2.20" 就变成2天,公式正确。

请斑竹修改一下

谢谢 1851244 朋友的测试,原程序有错误,修正后已在1楼重新上传。

另外将缺省z时的节日设定修正为1月1日,5月1日~3日,10月1日~3日;

日期段后增加了一个当日期段与星期值重复时是否重复扣的标识符"y"

欢迎大家测试。

TA的精华主题

TA的得分主题

发表于 2007-3-16 18:30 | 显示全部楼层

加载完函数,还是算的不对.2007-3-1和2007-6-1结果为64天,如果刨除6,7就变成了69天``````

谁看看这是那出的问题?

公式如下:=workdays(2007-3-1,2007-6-1,{6,7})

 

[em06][em06]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-7 08:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

公式:=workdays("2007-3-1","2007-6-1")不带可选参数z,表示起始日期之间扣除法定节日5.1~5.3和周六、日后的剩余天数结果为64日。

公式:=workdays(2007-3-1,2007-6-1,{6,7})起始日期应加双引号:=workdays("2007-3-1","2007-6-1",{6,7}),它表示起始日期之间扣除大括号内参数的剩余天数,即扣除周六、日后的天数,结果为67日,比前者多3日,因为没有扣除五一节3天的节日。

TA的精华主题

TA的得分主题

发表于 2007-9-7 22:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢分享!

TA的精华主题

TA的得分主题

发表于 2007-12-11 15:49 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-2-2 22:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
厉害 收下啦 谢谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 13:33 , Processed in 0.067983 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表