ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 特别复杂的年休假-请教!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-6-4 15:03 | 显示全部楼层 |阅读模式
请教各位高手, 我们的年假为第一年六天,第二年起12天,满10年15天. 现在我们按年算天数, 比如一员工2007-5-6日入职,
那么他到2008-5-5号有6天年假,2008-5-6起每年12天, 那么他2008年1月1日到5月六日按照6天标准算假,而5月7日后按照每年12天年假标准算假,请问如何用公式计算?

我列的公式如下,但是这个公式无法按月历年计算
=IF(DATEDIF(D3,"2009-12-31","y")>=10,15,(IF(DATEDIF(D3,"2009-12-31","y")>=2,12,6)))
之前有参考这个公式:
=SUM(5*(DATEDIF($D3,DATE(F$2,{1,2,3,4,5,6,7,8,9,10,11,12},1),"Y")>={1;10;20}))/12
但是换成不是5的倍数的情况就不行啦, 能否请各位大虾赐教?

还有希望做个有效期设定, 即2008年年假有效期不超过2009年6月1日, 如何做呢?

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-4 15:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 曦妈 于 2009-6-4 15:03 发表
请教各位高手, 我们的年假为第一年六天,第二年起12天,满10年15天. 现在我们按年算天数, 比如一员工2007-5-6日入职,
那么他到2008-5-5号有6天年假,2008-5-6起每年12天, 那么他2008年1月1日到5月六日按照6天标准算假 ...

不清楚,你的结果的详细要求,只能给你一计算年休假的公式:
  1. A1放入职日,B1放当日日期

  2. =SUM(3*(DATEDIF(A1,B1+1,"y")>={1,2,10})*{2,2,1})
复制代码
建议上传一个附件,详细说明你的要求。

TA的精华主题

TA的得分主题

发表于 2009-6-4 16:06 | 显示全部楼层
=IF(DATEDIF(D3,"2009-12-31","y")>=10,15,(IF(DATEDIF(D3,"2009-12-31","y")>=2,12,6)))
可以用这个公式来代替:
=LOOKUP(DATEDIF(D3,"2009-12-31","y"),{1,2,10},{6,12,15})

如果把上面的公式换成:
=LOOKUP(DATEDIF(D3,TODAY(),"y"),{1,2,10},{6,12,15})
就会计算到今天为止,该员工可以享受多少天年假了

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-4 17:15 | 显示全部楼层

再试试

上面两位大大虾的方法都有试过,但是还是不行,请帮忙看看我的附件,谢谢啦!

[ 本帖最后由 曦妈 于 2009-6-4 17:27 编辑 ]

Sample.rar

5.7 KB, 下载次数: 225

TA的精华主题

TA的得分主题

发表于 2009-6-4 18:35 | 显示全部楼层
原来你要求2009年度折算后应该享受的年假数呀,晕

在你的附件中E4输入如下公式,其余下拉:

=CEILING(((DATE(2009,MONTH(A4),DAY(A4))-IF(A4<DATE(2009,1,1),DATE(2009,1,1),A4))*LOOKUP(DATEDIF(A4-(YEAR(A4)=2009),DATE(2009,MONTH(A4),DAY(A4))-1,"y"),{0,2,10},{6,12,15})+(DATEVALUE("2009-12-31")-DATE(2009,MONTH(A4),DAY(A4)))*LOOKUP(DATEDIF(A4-(YEAR(A4)=2009),DATE(2009,MONTH(A4),DAY(A4)),"y")+1,{0,2,10},{6,12,15}))/365,0.5)

考虑到年假最好精确到半天,所以没有四舍五入取整,而是精确到半天。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-5 01:57 | 显示全部楼层

还是出错啦!

谢谢回复,但是好像算出来不大对,只有满0,1,10年的这种年度才有折算,其他年度应该是整的6,12,15天,我自己又编了个公式,
从道理上看应该是对的,但是在表上总显示#N/A, 这个问题真是很让人苦恼啊,还得请各位帮忙看看是哪出错了,谢谢!

=IF(YEAR($A5)<$B$3,SUM(3*(DATEDIF($A5,DATE(C$3,{1,2,3,4,5,6,7,8,9,10,11,12},1),"Y")>={1;2;10})*{2,2,1}/12),0)

[ 本帖最后由 曦妈 于 2009-6-5 02:43 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-5 02:41 | 显示全部楼层

还是差一点!

这条公式视乎可以符合大福分要求,但是09年的还是会出错,到底错在哪呢?请大虾指教!
=IF(YEAR(A4)>$C$3,0,SUM(3*(DATEDIF($A4,DATE(C$3,{1,2,3,4,5,6,7,8,9,10,11,12},1),"Y")>={0;1;10}))*{2,2,1}/12)
算出来是这样。。。

12.0
12.0
8.5
#NUM! (2009-5-15这个错误)
12.0
8.0

TA的精华主题

TA的得分主题

发表于 2009-6-5 09:26 | 显示全部楼层
不好意思,昨天做得匆忙,没有好好测试,上面的公式微调一下就能正常工作了

=CEILING(((DATE(2009,MONTH(A5),DAY(A5))-IF(A5<DATE(2009,1,1),DATE(2009,1,1),A5))*LOOKUP(DATEDIF(A5-(YEAR(A5)=2009),DATE(2009,MONTH(A5),DAY(A5))-1,"y"),{0,1,9},{6,12,15})+(DATEVALUE("2009-12-31")-DATE(2009,MONTH(A5),DAY(A5)))*LOOKUP(DATEDIF(A5-(YEAR(A5)=2009),DATE(2009,MONTH(A5),DAY(A5)),"y"),{0,1,9},{6,12,15}))/365,0.5)

这个是照着愿意翻译的公式,有点复杂了,再想想简化版的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-5 10:00 | 显示全部楼层

回复 8楼 sunya_0529 的帖子

谢谢啦,这次是对的啦,但公式真的很复杂,看到有点晕,呵呵

TA的精华主题

TA的得分主题

发表于 2009-6-5 10:33 | 显示全部楼层
这个公式又短了些:

=CEILING(LOOKUP(2009-YEAR(A4),{0,1,9},{6,12,15})-TEXT(2009-YEAR(A4),"[<2]6;[=9]3;!0")*(DATE(2009,MONTH(A4),DAY(A4))-DATE(2009,1,1))/365,0.5)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 03:11 , Processed in 0.051446 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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