【函数】:从不规则的编号中提取中间较大的连续数字
创作者俱乐部成员
关于从不规则的数据中(其实大都还是有规律可寻的)提取部分字符,数字这种题型,之前我有分享过很多的案例,方法诸如Power Query,函数,分列,快速填充等,但是这次的小伙伴问的问题用的这个函数老实说我也是第一次听说和使用,那就借着她这个问题也和大家分享并学习一下吧。
案例是这样的:
从提取结果可以看到,提取的数字是中间的一部分,这组数据的规律是有个短横线,前面有的有两个字母开头,也有三个字母开头,还有没有字母开头的,提取的数字也不完全是短横线之前的,而是夹在中间比较大的那个数值。这种确实不大容易。
直接来看函数:AGGREGATE
第一个参数有19个,看上去是个计算方式。根据我们的需求,如果我们要把单元格中的数值进行逐个拆分组合,那么在得到的一组数据中,就应该取那个最大的数值就可以了。分解来说是这样的,就拿“CL2012115-C100“这个料号来说吧。假设我们从左往右挨个提取组合,那这个数组就变成了:
2
20
201
2012
20121
201211
2012115
2012115-
依此类推,可以看到,最后那个”2012115-“就已经不是数值了,就不能和前面一堆的数值进行比较。所以我们只需要将前面生成的一堆数值进行比较,提取最后一个最大的就可以了。那到了第几个数字,那这个第几个数字就是最大的,我们可以用到的函数应该是Large(数组,k),也就是第K个最大的。
明白了这个原理,再来按照填写一开始的那个参数。
那么这里aggregate的第一个参数就应该是:
写完第一个,第二个就出来了,第二个参数也只有8个
这里因为是数值的比较,到后面就会有文本出来,那么对于文本和数值这种比较的话,肯定会出现错误值,所以这里可以选择忽略错误值,直接输入6就可以。
接下来才是比较关键的步骤:如何将这些字符挨个进行拆解和组合。这里就要用到数组的概念了。
提取字符最常用的就是文本函数了,left, mid, right,但是如果选择left或right的话,第一个或最后一个字符一直都在,就不可能将文本数值完全分割开来,比如使用left函数的情况:
right函数跟这个是倒着的,就不举例说明了。但是换成mid那情况就不一样了,毕竟mid的参数也要多一个,而且可以从中取值。
当然,如果我们要把这个数据全部罗列出来,那么公式就要变一下,可以这么写:
然后这个中间有很多是文本,只需要改动一下,就可以只留下数值了。
这样再通过之前aggregate第二参数,屏蔽错误值,就能找出所有数值中的最大值了。最大值就是那一串完整的连续的数值了,也就提取到了我们要的数字部分。所以,连起来写这个公式就是:
对了,因为这个里面用到了数组的方式,所以写完公式的时候不要直接点击Enter,必须是在结束的时候三个键一起才可以:Ctrl+Shift+Enter。这样你会在公式的最外面看到嵌套了一个大括号{}。
恭喜自己又get了一个新函数。
因为WPS暂时没有Power Query的功能,所以这里就不分享了。如果需要的话,可以留言。
WPS函数专家
创作者俱乐部成员