雪花新闻

【原】这也太牛了吧,白学了15年Excel,正则简直无敌的存在,刷新认知

与 30万 粉丝一起学Excel


昨天文章《复制粘贴太慢,公式太难,这才是最强的数据处理神技》,粉丝的留言,原来的VBA自定义函数,遇到小数会存在问题。


为此,卢子花了一天的时间,研究了正则发现了一片新天地以前那些难于上青天的问题,瞬间就变得很简单。

1.含有小数、负数求和出错的优化

\d+只是正则里面一个用法,匹配数字,相当于[0-9]

小数、负数同时存在,要用-?\d+\.?\d+-就是负号\.代表小数点。

=正则提取(A2,"(-?\d+\.?\d+)","+",2)

还有一大堆表示法,一次性很难记住,先知道一些常用的就好。

1)匹配邮编,邮编是6位数字。正则表达式:\d{6}

2)匹配手机,手机号是11位数字。正则表达式:\d{11}

3)匹配电话,电话是区号-号码组成,区号有3到4位,号码有6到9位。正则表达式:\d{3,4}-\d{6,9}

4)匹配日期,日期格式如2022-9-17,明显数字加横线组成。正则表达式:\d{4}-\d{1,2}-\d{1,2}

2.普通公式写到吐血的时间分离

这是昨晚某粉丝的问题,卢子用普通公式写了一半就放弃了,实在太难。输入很乱,没啥规律,需要一大堆判断。

于是用了正则,瞬间所有问题都不是问题了,轻松拿下。

开始时间:时间都是以:作为分隔符号,存在中文和英文状态下的:,因此用[::]表示2种符号。时或者分都是1-2位,因此用\d{1,2}。最后用ASC将中文的符号全部转换成英文的。

=ASC(正则提取(A2,"(\d{1,2}[::]\d{1,2})","+",0,1))

结束时间:

=ASC(正则提取(A2,"(\d{1,2}[::]\d{1,2})","+",0,2))

用时:都是min之前1-2位,也就是\d{1,2}min。

=正则提取(A2,"(\d{1,2}min)","+",0,1)

3.最后,再来个简单的案例,从字符串里面分离出日期、步数、排名,巩固下用法


日期:
=正则提取(A2,"(\d+)","+",0,1)


步数:
=正则提取(A2,"(\d+)","+",0,2)

排名:

=正则提取(A2,"(\d+)","+",0,3)

如果日期改变成2022-9-17这种格式,也可以顺利提取。

=正则提取(A2,"(\d{4}-\d{1,2}-\d{1,2})","+",0,1)

从上面的案例可以看出,不管多乱,都能提取任意数字,全部数字,甚至求和,接近全能的代码。

活到老,学到老,即便卢子有15年的Excel经验,还有一些知识没掌握好。你也要坚持学习。 

相关文章