Excel成神之道-004-文本型时长转换成分钟数

接到老同学的一个case,真是把我难住了,想了各种招,做了各种优化,终于问题搞定,写这个文章以做记录和分享,需求问题如下所示(把左边文本时长变成右边的分钟数): 

时长分钟数
1天2小时5分1565
2小时55分175
3分3
1天49分1489
6小时360
4天5760

第一招:用辅助列和替换函数3次嵌套,3个步骤实现

1)添加一列,函数输入

="=="&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B2,"天","*24*60+"),"小时","*60+"),"分","")

获取到数学公式,形如:==1*24*60+2*60+5

​​​​​​​

2)复制该列,粘贴到另一列、或者原地粘贴,粘贴为数值

3)替换“==”为“=”,完成

最后结果如下图所示:

 第二招:用单公式实现,过程极为烧脑,不推荐,迫不得已情况下使用:

        思考步骤:

        1)先计算“天”,找到“天”,提取对应的数字*24*60得到天数对应的分钟数,如果找不到“天”,那么天数对应分钟数为0。

        2)计算“小时”,如果找到“天”,那么获取“天”到“小时”之间的数字,即为小时数,*60等于分钟数,如果没有获取到“天”,那么直接左截取函数获取到小时数并*60,如果出错就是没有小时,对应小时分钟数就是0。

        3)计算“分”,如果没找到“分”,直接等于0,否则就是有“分”,判断有没有”小时“,有的话获取”小时“和”分“之间的数字,即为分钟数,否则判断有没有”天“,有的话就是获取”天“和”分“之间的数字,即为分钟数,最后就是”天“和”小时“都没有找到的情况下,条件直接True(),直接获取“分”前面的数字为分钟数。

        4)三者相加,即为完整的时长分钟数。

        完整的函数如下:

=IFERROR(LEFT(A2,FIND("天",A2)-1)*24*60,0)+IFERROR(IF(IFERROR(FIND("天",A2),0),MID(A2,FIND("天",A2)+1,FIND("小时",A2)-FIND("天",A2)-1)*60,IFERROR(LEFT(A2,FIND("小时",A2)-1)*60,0)),0)+IFERROR(IFS(IFERROR(FIND("分",A2),0)=0,0,IFERROR(FIND("小时",A2),0),MID(A2,FIND("小时",A2)+2,FIND("分",A2)-FIND("小时",A2)-2),IFERROR(FIND("天",A2),0),MID(A2,FIND("天",A2)+1,FIND("分",A2)-FIND("天",A2)-1),TRUE(),LEFT(A2,FIND("分",A2)-1)),0)

这一个方法是最后一刻想出来的。。比较完美,各种情况都考虑了

之前有几个方法考虑的不是那么周全,没办法,我就喜欢追求完美,为了记录过程,我把考虑不周的函数也粘贴在这里。

1.如下该函数仅考虑到天、小时、分按顺序排列的情况,没有考虑到唯独没有小时,或者只有天或者只有小时的情况

=IFS(IFERROR(FIND("天",A2),0),LEFT(A2,FIND("天",A2)-1)*24*60+MID(A2,FIND("天",A2)+1,FIND("小时",A2)-FIND("天",A2)-1)*60+MID(A2,FIND("小时",A2)+2,FIND("分",A2)-FIND("小时",A2)-2),IFERROR(FIND("小时",A2),0),LEFT(A2,FIND("小时",A2)-1)*60+MID(A2,FIND("小时",A2)+2,FIND("分",A2)-FIND("小时",A2)-2),IFERROR(FIND("分",A2),0),LEFT(A2,FIND("分",A2)-1))

2.只比1多考虑了天和分都有,唯独没有小时的情况

=IFS(IFERROR(FIND("天",A2),0),IF(IFERROR(FIND("小时",A2),0),LEFT(A2,FIND("天",A2)-1)*24*60+MID(A2,FIND("天",A2)+1,FIND("小时",A2)-FIND("天",A2)-1)*60+MID(A2,FIND("小时",A2)+2,FIND("分",A2)-FIND("小时",A2)-2),LEFT(A2,FIND("天",A2)-1)*24*60+MID(A2,FIND("天",A2)+1,FIND("分",A2)-FIND("天",A2)-1)),IFERROR(FIND("小时",A2),0),LEFT(A2,FIND("小时",A2)-1)*60+MID(A2,FIND("小时",A2)+2,FIND("分",A2)-FIND("小时",A2)-2),IFERROR(FIND("分",A2),0),LEFT(A2,FIND("分",A2)-1))

最后总结:

1.没必要的情况下,用第一招吧。不那么烧脑,不容易出错,逻辑清晰

2.写的再好也有可能有纰漏,所以如果工作环境中,最好用另一个方法验证正确性,或者至少抽查验证

3.写函数一定小心引号,一定要英文逗号,我调试里的好多时间是浪费在引号上的。

4.我还是太菜了,暂时没有想到什么更好的办法,只能用这两种土办法,如果你们有更好的办法,请私信我。

PS:研究过程中发现我的Excel2016和WPS都不支持Lambda函数,悲从心生。。是不是要excel最新版本或Excel365才支持?

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值