格式一统
时光真快,又过了十年,本期依旧实战分享。
朋友提问:我这有一列时间数据,是按天、时、分表示的,想把它统一成分钟数,这样方便计算,咋搞?
统一分钟数-源数据“这还不简单,天数*1440+时数*60+分数*1,这不就ok,小学数学啊。”
仔细看了看源数据:这,不简单!
可能是厉行节俭,源数据中,0天情况,直接省略了天;同理,0小时与0分钟也作了省略。
仔细审题
要是没省略,手动按字符分列三次,然后一乘一加,不要太简单。
现实骨感,那就公式?以提取字符为核心,简单理了下思路,如下图:
简单理一下思路理清思路后,咋一看,还挺简单,大框架才3层if函数嵌套,可能用到的函数都很常见:
find函数,查找指定字符用;
isnumber函数,判断是否数值;
mid函数,提取指定字符用。
试着写了下公式,好家伙,直接好家伙,函数一个套一个,期间还有其他问题,公式越写越长,越写越长,直接把我劝退了。
前门不通,是时候走后门了......
转换思路
如果都是“xx天xx小时xx分钟”,那就好了。
这条路好走。
添加B-G辅助列6列,分6步走。
辅助列B列公式B2公式:
=IF(ISNUMBER(FIND("天",A2)),A2,"0天"&A2),向下填充
翻译:找不到字符“天”,则在原值前添加字符“0天”;否则,返回原值。
在B列基础上,同理C2公式:
=IF(ISNUMBER(FIND("分钟",B2)),B2,B2&"0分钟"),向下填充
在C列基础上,D2公式:
=IF(ISNUMBER(FIND("小时",C2)),C2,SUBSTITUTE(C2,"天","天0小时")),向下填充
翻译:找不到字符“小时”,则把字符“天”替换为“天0小时”,即加上“0小时”到合适位置;否则,返回原值。
辅助列D列公式然后将天数、小时数、分钟数,统一为两位数表达。
F2公式:
=IF(FIND("天",D2)>2,D2,"0"&D2),向下填充
翻译:找到字符“天”的位置大于2,说明“天”前面有两位数字,返回原值;否则说明只有一个数字,前加“0”即为“xx天”标准格式。
辅助列F列公式H列公式:
=IF(FIND("小",E2)-FIND("天",E2)>2,E2,SUBSTITUTE(E2,"天","天0")),向下填充
翻译:找到“天”与“小”各自在字符串中位置,简单相减,即可判断小时数是否标准,然后将不标准的调整为标准格式。
辅助列h列公式G列公式同理:
=IF(FIND("分",F2)-FIND("时",F2)>2,F2,SUBSTITUTE(F2,"时","时0")),向下填充
“xx天xx小时xx分钟”标准格式到这里,接下来就太简单了,后续步骤:略。
扩展思路
数据处理到D列时,还有另一种思路,间隔法:
E2公式:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(D2,"小时",REPT(" ",10)),"分钟",REPT(" ",10)),"天",REPT(" ",10)),向下填充
翻译:主要是将天数、小时数、分钟数用空格字符,间隔开,方便提取数字。
间隔法间隔开后,提取就简单多了。
E2提取天数,公式:
=--MID(E2,1,5),向下填充
同理F2提取小时数,公式:
=--MID(E2,11,5),向下填充
同理G2提取分钟数,公式:
=--MID(E2,22,5),向下填充
翻译:略。
提取天数公式结语
也略吧......
下期分享,我们十年后再见......
网友评论