ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何将几个时间段相加,得出总工龄(精确到日)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-10-27 17:31 | 显示全部楼层 |阅读模式
跪求各位大神们帮帮忙吧!

提问-关于年月日相加.zip

42.38 KB, 下载次数: 25

TA的精华主题

TA的得分主题

发表于 2014-10-28 08:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一时之间没想到什么简洁的公式,下面的这个供参考。

由于12个月计作一年,这个换算没有问题,而多少天进位为一个月,这个需要斟酌,不过对计算精度的影响不大,如下图所示——
QQ截图20141028083924.png

两个公式分别为——
数组公式
  1. =TEXT(DATE(SUM(IFERROR(--LEFT(E2:G2,FIND("年",E2:G2)-1),0)),SUM(IFERROR(--MID(E2:G2,IFERROR(FIND("年",E2:G2),0)+1,IFERROR(FIND("个",E2:G2),0)-IFERROR(FIND("年",E2:G2),0)-1),0)),SUM(IF(ISERROR(FIND("日",E2:G2)),0,--SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(RIGHT(E2:G2,3),"年",""),"月",""),"日","")))),"yy年m个月d日")
复制代码
普通公式
  1. =LOOKUP(--LEFT(J2,2),{0,0;1,5;10,10;20,15})
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-28 09:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
sunya_0529 发表于 2014-10-28 08:44
一时之间没想到什么简洁的公式,下面的这个供参考。

由于12个月计作一年,这个换算没有问题,而多少天进 ...

先谢谢大哥!但是您的公式我试了一下,好像不能运行,能麻烦您给我传一份excel版的吗?麻烦您啦!

TA的精华主题

TA的得分主题

发表于 2014-10-29 08:26 | 显示全部楼层
daodijiaoshahao 发表于 2014-10-28 09:42
先谢谢大哥!但是您的公式我试了一下,好像不能运行,能麻烦您给我传一份excel版的吗?麻烦您啦!

鼓励你自己动手,留意我上面帖子里所说的,第一个公式是数组公式,粘贴进单元格后不是按回车键完成输入,而是要按组合键“Ctrl+Shift+Enter”完成!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-29 11:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
sunya_0529 发表于 2014-10-29 08:26
鼓励你自己动手,留意我上面帖子里所说的,第一个公式是数组公式,粘贴进单元格后不是按回车键完成输入, ...

刚试了一下,成功了!非常感谢!
不过还有一个进位方面的问题——比如计算:8个月+5年5个月+4年,结果显示“9年12个月31日”而不是“10年1个月”,能麻烦您帮忙改进一下吗?

TA的精华主题

TA的得分主题

发表于 2014-10-30 13:24 | 显示全部楼层
本帖最后由 sunya_0529 于 2014-10-30 13:28 编辑
daodijiaoshahao 发表于 2014-10-29 11:45
刚试了一下,成功了!非常感谢!
不过还有一个进位方面的问题——比如计算:8个月+5年5个月+4年,结果显 ...


要精确一点显示的话,换一种思路,借用宏表函数来处理数据,如下图所示——
QQ截图20141030130945.png

定义三个名称,分别为:data1、data2、data3——
  1. =IFERROR(EVALUATE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(三个时段相加!$E2,"年","+0"),"个月","/12+0"),"日","/365")),0)

  2. =IFERROR(EVALUATE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(三个时段相加!$F2,"年","+0"),"个月","/12+0"),"日","/365")),0)

  3. =IFERROR(EVALUATE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(三个时段相加!$G2,"年","+0"),"个月","/12+0"),"日","/365")),0)
复制代码
这三个名称的公式里仅单元格引用不同,请留意。

K2里的求和为三个名称相加,得到的结果是折算到年份的一个数字(一年按365天计算),用这个数值来计算年假其实就够了:
  1. =date1+date2+date3
复制代码
非要显示成“YY年M个月D日”的格式的话,可以使用下面的公式,如L2中所示——
  1. =TEXT(INT(K2),"0年;;;")&TEXT(INT(MOD(K2,1)*12),"0个月;;;")&TEXT(MOD(MOD(K2,1)*12,1)*365/12,"0日;;;")
复制代码

具体演示效果见附件( 提问-关于年月日相加.rar (41.86 KB, 下载次数: 35) ),注意,由于使用了宏表函数,所以文件格式要保存成“*.xlsm”的格式,并且打开文件时,记得要启用活动内容。

这个方法比单纯的函数复杂一点,又比自定义函数来得简单一些,对于类文本数据的处理有典型的参考意义,建议楼主自己动手按上面的步骤实际操作一下,肯定会有不少收获的。




TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-30 14:32 | 显示全部楼层
sunya_0529 发表于 2014-10-30 13:24
要精确一点显示的话,换一种思路,借用宏表函数来处理数据,如下图所示——

感谢您的指点!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 10:04 , Processed in 0.045603 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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