ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助:年假的计算

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-8-15 16:26 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这在愁年假的计算公式

我们公司是1年有7天年假,按实际在职时间计算,例如2012年2月1日入职,公式计算就是=(today()-date(2012,2,1))/365*7
                  3年以上(含3年),有10天的年假,如果一年当中,刚好有个转折点,例如2009年4月7日入职,公式计算就是=(DATE(2012,4,6)-DATE(2012,1,1))/365*7+(TODAY()-DATE(2012,4,7))/365*10
                 5年以上(含5年),有15天年假,计算方式如3年以上是类似的。

              所以如何在表格中可以直接判断呢,否则现在都是手动改的。求助高手啊!!!!


该贴已经同步到 大肚人要瘦身_的微博

TA的精华主题

TA的得分主题

发表于 2012-8-15 17:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
上个附件来看看

TA的精华主题

TA的得分主题

发表于 2012-8-15 17:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一般年假算法,就是判断入职日期和今天日期之间是是几年,然后根据工龄来判断年假
  1. =LOOKUP(DATEDIF(A1,TODAY(),"y"),{0,3,5},{7,10,15})
复制代码
以2012-8-15开始计算职工年假,楼主能详细说下你们公司的年假算法吗?
1、计算出来有小数的天数如何处理
2、阶梯计算的计算方法

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-15 17:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我表格是这样的
123.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-15 18:05 | 显示全部楼层
goodlong 发表于 2012-8-15 17:49
一般年假算法,就是判断入职日期和今天日期之间是是几年,然后根据工龄来判断年假以2012-8-15开始计算职工年 ...

主要是2年转到3年的转折点,或者是4年转到5年的转折点,这两个要如何设置自动判断 用不同的公式呢?

TA的精华主题

TA的得分主题

发表于 2012-8-16 11:15 | 显示全部楼层
本帖最后由 sunya_0529 于 2012-8-16 11:33 编辑
大肚人要瘦身_ 发表于 2012-8-15 18:05
主要是2年转到3年的转折点,或者是4年转到5年的转折点,这两个要如何设置自动判断 用不同的公式呢?


A
B
C
D
E
1
入职时间
转正时间
司龄
2011
2012
2
2012/2/1

0.99
0
3.77
3
2009/4/7

3.63
7
5.43


其中D2中的公式如下:
  1. =ROUND(IF(D$1<YEAR($A2),,SUM(ABS((D$1&TEXT($A2,"-m-d"))-TEXT(DATE(D$1+{0,1},1,1),"[<"&TODAY()&"]0;"&SUBSTITUTE(TODAY(),"0","\0")))*LOOKUP(DATEDIF($A2,MAX($A2,D$1&TEXT($A2,"-m-d")),"y")+{-1,0},{-1,0,3,5},{0,7,10,15})/SUM(DATE(D$1+{0,1},1,1)*{-1,1}))),2)
复制代码

其余右拖下拉复制即可。




TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-17 23:08 | 显示全部楼层
sunya_0529 发表于 2012-8-16 11:15
其中D2中的公式如下:
其余右拖下拉复制即可。

请问可以讲解一下吗,不是很看得懂

TA的精华主题

TA的得分主题

发表于 2012-8-20 10:33 | 显示全部楼层
本帖最后由 sunya_0529 于 2012-8-21 08:40 编辑
大肚人要瘦身_ 发表于 2012-8-17 23:08
请问可以讲解一下吗,不是很看得懂

这个公式的原理简单说起来就是:

(一年中临界点前的天数*可休年假数+临界点后的天数*可休年假数)/一年的天数

其中,临界点是指相对于入职日期的当年的日期,比如说2009-5-1入职,那么今年的临界点就是2012-5-1,由于到临界点,恰好是3年,之后可以按10天/年的标准享受年假,所以公式就是:

=(("2012-5-1"-"2012-1-1")*7+(today()-"2012-5-1")*10)/366

这样就完成了临界点的折算。

ABS((D$1&TEXT($A2,"-m-d"))-TEXT(DATE(D$1+{0,1},1,1),"[<"&TODAY()&"]0;"&SUBSTITUTE(TODAY(),"0","\0"))) 公式的这一部分求的一个数组,临界点前后的天数,即上例中的("2012-5-1"-"2012-1-1")(today()-"2012-5-1")

LOOKUP(DATEDIF($A2,MAX($A2,D$1&TEXT($A2,"-m-d")),"y")+{-1,0},{-1,0,3,5},{0,7,10,15})公式的这一部分求的也是一个数组,到达临界点前后的可休年假天数,即上例中的7和10。

SUM(DATE(D$1+{0,1},1,1)*{-1,1})求的是一年的总天数,即上例中的366。

IF(D$1<YEAR($A2),,SUM())的作用是判断是否入职日期在统计日期之后,如果是的话,年假就为0了。两个,之间省略了参数,相当于是0。

最外层的ROUND(,2)是将计算结果四舍五入保留两位小数。

TA的精华主题

TA的得分主题

发表于 2012-8-20 10:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 sunya_0529 于 2012-8-20 14:26 编辑

由于你的年假中,今年的可休年假是统计到Today()的,如果是临界点相对于Today()来说,还没有到来的话,比如说2009-10-7日入职的,那么上面的公式还要做个小小的改进才能计算正确,公式如下:

=ROUND(IF(E$1<YEAR($A3),,SUM(ABS(MIN(E$1&TEXT($A3,"-m-d"),TODAY())-TEXT(DATE(E$1+{0,1},1,1),"[<"&TODAY()&"]0;"&SUBSTITUTE(TODAY(),"0","\0")))*LOOKUP(DATEDIF($A3,MAX($A3,E$1&TEXT($A3,"-m-d")),"y")+{-1,0},{-1,0,3,5},{0,7,10,15})/SUM(DATE(E$1+{0,1},1,1)*{-1,1}))),2)

调整的地方如红色字体所示。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-6 13:38 , Processed in 0.026770 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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