当前位置:首页 > 技术分析 > 正文内容

从不规律的文本「时分」格式中提取并计算正确的时间

ruisui883个月前 (04-05)技术分析23

小小表格,变化无穷。

如图,怎么根据B列文本的时分秒格式数据,计算出总的秒数,并以“hh:mm:ss”的格式显示到右侧单元格?



这是我的学员分享出来的一个问题,很有代表性。


分享三种解决思路。


1、分别提取时、分、秒,再作计算


这是最简单粗暴的思路,但是由于文本时间不规律,要想轻松地提取出数字也不是件容易的事。


以下,我写了3个公式,分别提取时、分、秒,各位看看能否看懂?


▲ 提取时


提取小时数,用LEFT从左边提取,具体分两种情况:


1)如果文本中有小时,则提取的位数为:“时”字的位置-1

2)如果文本中没有小时,则FIND将返回错误值,返回0即可


因此,最后外面嵌套一个IFERROR做错误值处理。


▲ 提取分


提取分的思路是,用MID从中间取,起始位置位于“时”字的下一位(如果文本时间中没有“时”字,则从0+1位开始提取),提取的字符数为“分”字的位置减“时”字的位置再减1。


当文本时间如“18秒”,既不包含“时”也不包含“分”时,计算结果会出现错误值,因此最后外面用IFERROR函数处理,将结果显示为0。


▲ 提取秒


提取秒,也有两种情况:


1)文本时间中不存在秒,即FIND查找“秒”时出现错误值,这种情况下返回0

2)文本时间中存在秒,此时可用文本时间的字符长度(LEN)减去“分”字的位置,来获取文本时间中的秒


用RIGHT函数提取文本部分的秒,如:34秒


再嵌套SUBSTITUTE函数,将“秒”字替换为空,得到秒的数值部分,如:34


分别提取时、分、秒数值后,只要简单计算即可计算出对应的总的秒数。



2、直接将文本时间变成文本算式


学过表格学院函数课的同学可能记得,有一节(第19课)是讲文本算式的计算,我们可以想办法将文本时间转化成文本算式。


比如,把文本时间中的“秒”替换为空,把“分”替换为“*60+0”,把“时”替换为“*3600+0”,转化后的效果如下:



为什么替换时要+0,大家可以动手写一下,自行思考。


处理完毕,如果你有安装方方格子插件,可以使用EvaluateExp函数直接进行文本算式的计算,得出结果。



如果没有方方格子,可以用我们函数课里提到的宏表函数进行处理:



由于宏表函数EVALUATE不能直接在单元格中使用,因此先提前在名称管理器中定义。



定义后,直接在单元格中引用定义的名称,得到计算结果。

3、使用LOOKUP构造数组并查找


第3种方法,是@山花子 同学分享的,通过对文本时间格式进行处理,再用LOOKUP进行查询。公式如下 :



对于初学函数的同学,不是很好理解。


在Excel中,当你在单元格输入“1时20分”、“1时20分30秒”时,Excel都会接受并识别你输入的时间,但是如果输入“1时”、“20分30秒”、“30秒”这样的数据时,Excel是识别不了的,会直接认为是文本。


{"0时0分","0时",""}&B6,通过数组计算对原文本格式进行处理,返回结果如下:



再经过负值运算得到:



这里,用LOOKUP(0,-({"0时0分","0时",""}&B6))查找0,因为只有1个非错误值,就会找到这个最接近查找值的值,而这个值当前是一个负值,因此再做一次负值运算:=-LOOKUP(0,-({"0时0分","0时",""}&B6))。


这个结果大家看到了是一个小数,代表的是天数的概念,因此再乘24小时再乘3600秒,得到的就是总的秒数了。


这就是这个公式的原理,如果你还没有看懂,我建议你系统地学一下函数。


事实上,这个公式到目前并不完美,因为一旦文本时间中存在“1时”格式的数据时,就会出错:



因为空""连接“1时”,得到的仍然是“1时”,我们说了“1时”不是Excel能识别的时间,因此,在使用这个公式时,还要做一次处理:



如果结果出现NA,则直接用文本时间&"0分",将其转化为可识别的时间,再转化为秒数。


最后,不管用哪种方法,取出的是总的秒数,我们需要将期显示为规范的时间格式,即“hh:mm:ss”。



用总秒数除以3600,设置单元格格式,自定义格式:hh:mm:ss,搞定!


好了,今天的分享就到这里,如果想系统学习Excel函数课,欢迎私信我哟,我在留言区等大家!

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3283.html

分享给朋友:

“从不规律的文本「时分」格式中提取并计算正确的时间” 的相关文章

专为系统管理员设计的LINUX发行版SYSLINUXOS

SysLinuxOS 承诺“结束为管理任务寻找正确工具”的局面,提供“非常广泛的软件选择,特别是用于使用互联网”。译自 SysLinuxOS, A Linux Distro for System Administrators,作者 David Cassel。全球各地的系统集成商正在发现 SysLin...

Vue.js 组件通信的 3 大妙招

在 Vue.js 中,组件化是其核心概念之一,允许你将复杂的界面拆分成多个独立的、可复用的组件。在构建大型应用时,如何高效地在组件之间传递数据和触发事件是非常重要的。Vue.js 提供了多种方式来处理组件间的通信,下面是最常用的 3 种方式:1.父子组件通信:通过 Props 和 Events在 V...

代码分支规范

一.gitflow工作流说明:主分支:master,稳定版本代码分支,对外可以随时编译发布的分支,不允许直接Push代码,只能请求合并(pull request),且只接受hotfix、release分支的代码合并。gitlab上做限制。热修复分支:hotfix,针对现场紧急问题、bug修复的代码分...

祸害阿里云宕机3小时的IO HANG究竟是什么?

本文来自微信公号“CSDN”(ID:CSDNnews),作者 | 王知无, 责编| 郭 芮。2019年3月3日凌晨,微博炸锅,有网友反映说阿里云疑似出现宕机,华北很多互联网公司受到暴击伤害,APP、网站全部瘫痪,我自己的朋友圈和微信群里也有好友反馈,刚刚从被窝被叫起来去修Bug,结果发现服务器登不上...

VUE-router

七.Vue-router1、什么是vue-routervue-router是vue.js官方路由管理器。vue的单页应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统页面切换是用超链接a标签进行切换。但vue里是用路由,因为我们用Vue做的都是单页应用,就相当于只有一个主的i...

从 Vue2.0 到 React17——React 开发入门

作者:佚名来源:前端大全前言找工作时发现有一些公司是以React作为技术栈的,而且薪资待遇都不错,为了增加生存的筹码,所以还是得去学一下React,增加一项求生技能。因为我用Vue2.0开发项目已经四年了,故用Vue2.0开发项目的思路来学习React。前端项目是由一个个页面组成的,对于Vue来说,...