本节主要分享的函数是IFERROR和NUMBERVALUE
上回我们用MID和FIND函数已经将数值提取出来,但是一些错误的返回值显示“#VALUE!”,此时我们需要检验错误返回值,并将错误值返回指定值。
IFERROR(value, value_if_error)
![aa2dca8b647d8cfbd152c2bb1307a348.png](https://img-blog.csdnimg.cn/img_convert/aa2dca8b647d8cfbd152c2bb1307a348.png)
H3=IFERROR(MID(F3,1,FIND("小",F3)-1),0)I3=IFERROR(MID(F3,FIND("时",F3)+1,(FIND("分",F3)-FIND("时",F3)-1)),0)
如此类推算出J列跟K列,结果如下图:
![1a7862077baf5a20a29972cf196ef2da.png](https://img-blog.csdnimg.cn/img_convert/1a7862077baf5a20a29972cf196ef2da.png)
我们可以看出H、I、J、K、L列部分返回的值靠左,意味着这些返回值只是“文本”,并不是数值。如果需要计算出具体的时间,还需要将文本转化成数值。
很多同学都用过VALUE函数,将文本值转化成数值,今天我要介绍的是万金油函数,NUMBERVALUE能够将空格等少数不规范文本强制转化为0,只返回文本中含有的单独数值,如果含有文本字母,将返回错误值,本次将用该函数以解决K列和L列的含有多有多余数值的文本。
NUMBERVALUE(Text, [Decimal_separator], [Group_separator ])
![ed27e19b5287c5dcc9efec8dff58889f.png](https://img-blog.csdnimg.cn/img_convert/ed27e19b5287c5dcc9efec8dff58889f.png)
我们这里用NUMBERVALUE函数将H列到L列以后得到以下结果:
![9c565ee7076f88dbce712a1581ef26a3.png](https://img-blog.csdnimg.cn/img_convert/9c565ee7076f88dbce712a1581ef26a3.png)
K3=NUMBERVALUE(IFERROR(MID(F3,1,FIND("分",F3)-1),0))L3=NUMBERVALUE(IFERROR(MID(F3,1,FIND("秒",F3)-1),0))
再次用IFERROR函数以后即可将错误值返回为0.
K3=IFERROR(NUMBERVALUE(IFERROR(MID(F3,1,FIND("分",F3)-1),0)),0)L3=IFERROR(NUMBERVALUE(IFERROR(MID(F3,1,FIND("秒",F3)-1),0)),0)
![eaf7ce9bf3557a33eadc28f273508033.png](https://img-blog.csdnimg.cn/img_convert/eaf7ce9bf3557a33eadc28f273508033.png)
到这一步,已经将所有时间的数值提取出来,即可计算出所有时间转化为秒的数值。
具体公式如下:
NUMBERVALUE(IFERROR(MID(F3,1,FIND("小",F3)-1),0))*3600+NUMBERVALUE(IFERROR(MID(F3,FIND("时",F3)+1,(FIND("分",F3)-FIND("时",F3)-1)),0))*60+NUMBERVALUE(IFERROR(MID(F3,FIND("钟",F3)+1,(FIND("秒",F3)-FIND("钟",F3)-1)),0))+IFERROR((NUMBERVALUE(IFERROR(MID(F3,1,FIND("分",F3)-1),0))),0)*60+IFERROR((NUMBERVALUE(IFERROR(MID(F3,1,FIND("秒",F3)-1),0))),0)
公式其实不够精简,但是工欲善其事,必先利其器。