从不规律的文本「时分」格式中提取并计算正确的时间
小小表格,变化无穷。
如图,怎么根据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函数课,欢迎私信我哟,我在留言区等大家!