ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 年假计算公式

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-28 14:38 | 显示全部楼层 |阅读模式
我公司年假分两部分:法定年假和公司年假 年假.rar (6.25 KB, 下载次数: 1045)
法定年假:连续工作1-10年:5天; 连续工作10-20年:10天; 连续工作20年以上:15天。附件公式已满足这个条件,但是现在需要增加一个判断:如果当年由5天增加至10天,我需要将当年的年假分段计算;比如3月31日满10年工龄 ,当年年假计算方式应该为 5天/12个月*3个月+10天/12个月*9个月

公司年假:员工入职满一年后享受1天年假,每多一年多一天最多不超过5天,我设置的公式可以满足这一条件,但是需要增加一个判断:第一年的年假需要按照在册系数则算。比如3月31日满1年,当年年假应为 1/12*3

我需要增加红色部分这个条件,麻烦各位大侠支个招嘛,谢谢,谢谢。

TA的精华主题

TA的得分主题

发表于 2012-5-28 14:53 | 显示全部楼层
E1公式:
  1. =LOOKUP(D3,{1,10,20;5,10,15})
复制代码
H1公式:
  1. =INT(MIN(G3,5))
复制代码

TA的精华主题

TA的得分主题

发表于 2012-5-28 16:35 | 显示全部楼层
给你一个法定年假折算的标准算法(含临界点折算),其他的可以举一反三了吧——

数组公式:
  1. =SUM(ABS(DATE(2012,MONTH(C3),DAY(C3))-DATE(2012+{0,1},1,1))*LOOKUP(DATEDIF(C3,DATE(2012,12,31),"y")-{1,0},{0,0;1,5;10,10;20,15}))/SUM(DATE(2012+{1,0},1,1)*{1,-1})
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-29 11:54 | 显示全部楼层
研究出来了,研究出来了。上传供大家分享,同时也谢谢各位的指导。。。。。。{:soso_e120:}

年假 Annual leave.rar

11.84 KB, 下载次数: 2127

TA的精华主题

TA的得分主题

发表于 2012-5-31 18:30 | 显示全部楼层
小小夏天天 发表于 2012-5-31 17:25
发现好像该公式对当年毕业的应届生不受用。

公式里已经定义了,工龄满1年以上的才有年假5天起的。不满1年的是0

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-31 17:22 | 显示全部楼层
sunya_0529 发表于 2012-5-28 16:35
给你一个法定年假折算的标准算法(含临界点折算),其他的可以举一反三了吧——

数组公式:

谢谢Sunya提供的公式,但是在实际操作中发现一个问题:法定年假的享受条件是连续工作满12个月以上才能享受,可是该公式没有剔除这个条件。
因为这个公式太专业了,我不知道从何下手改起,嘿嘿。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-31 17:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 小小夏天天 于 2012-5-31 17:27 编辑
小小夏天天 发表于 2012-5-31 17:22
谢谢Sunya提供的公式,但是在实际操作中发现一个问题:法定年假的享受条件是连续工作满12个月以上才能享受 ...


发现好像该公式对当年毕业的应届生不受用。

TA的精华主题

TA的得分主题

发表于 2012-5-31 18:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
顺便解释一下这个通用折算公式的计算原理吧——
  1. =SUM(ABS(DATE(2012,MONTH(C3),DAY(C3))-DATE(2012+{0,1},1,1))*LOOKUP(DATEDIF(C3,DATE(2012,12,31),"y")-{1,0},{0,0;1,5;10,10;20,15}))/SUM(DATE(2012+{1,0},1,1)*{1,-1})
复制代码
1、ABS(DATE(2012,MONTH(C3),DAY(C3))-DATE(2012+{0,1},1,1))这部分会得到两个数值,即2012年年头到临界日的天数,临界日到2012年年底的天数。DATE(2012,MONTH(C3),DAY(C3))返回的就是临界日的日期,如“2012-5-1”。

2、LOOKUP(DATEDIF(C3,DATE(2012,12,31),"y")-{1,0},{0,0;1,5;10,10;20,15})也是得到两个数,假设到2012年12月31日可以享受多少天法定年假,“-{1,0}”的作用是测试是否包含临界点。如果到2012年5月1日正好满10年,按规定可以享受10天年假,那么应该是5月1日前按5天折算,5月1日后按10天折算。


3、上述1和2中对应的两个数相乘,就可以得到:临界日前天数*可休年假天数+临界日后天数*可休年假天数,其中,临界日前天数+临界日后天数就是一年的天数(365或者366)。SUM(DATE(2012+{1,0},1,1)*{1,-1}),这是公式的最后一部分,作用也就是返回一年的天数。用上面两组数的乘积和除上全年的天数,不就是2012年折算后应休的天数吗?

要理解公式的含义,最好的方法是使用公式求值,一步一步看计算的逻辑和结果,看多了也就熟练了。

如果要计算2013年可休年假天数,只要替换公式中出现的四个“2012”就可以了。

TA的精华主题

TA的得分主题

发表于 2013-3-25 17:21 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-5-20 16:53 | 显示全部楼层
sunya_0529 发表于 2012-5-31 18:42
顺便解释一下这个通用折算公式的计算原理吧——1、ABS(DATE(2012,MONTH(C3),DAY(C3))-DATE(2012+{0,1},1,1) ...

thanks,又帮忙解决了一个难题
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 18:49 , Processed in 0.048017 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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