EXCEL如何提取连续数字字符串的公式详解
来源:网络收集 点击: 时间:2024-07-26方式1比较简单,用到了lookup、row、SEACHB以及MIDB函数。
SEACHB函数是查找单字节(也就是字母或数字等)的第一次出现的的位置,以这个为准作为起始位置截取一定长度的字符串(MIDB),这是就用到ROW函数,在公式中ROW($1:$19)={1;2;3;4;5;6;7;8;……}即1-19个长短不一的长度,这三个公式组合如下:midb(被提取的字符串a2,seachb(?,a2),row($1:$19))
例如字符串为:产品号1257型,那么
midb(被提取的字符串a2,seachb(?,a2),row($1:$19))
={1,12,125,1257,1257型}
(函数的结果是一组数据集合)
这个时候用到lookup函数,使用该函数的区域必须升序排列,
lookup(0,-midb(被提取的字符串a2,seachb(?,a2),row($1:$19)))
表示返回-midb结果在最接近0的值即-1257,
最后整体公式在进行负数转换就负负得正了
缺点就是数字前面不能是字母,不然seachb查找就第一单字节就是从字母开始,最后整个提取都没有数字了,就会返回错误;

方式2理解略微比较绕 ,用到了MID()、MATCH()、COUNT()、ISNUMBER()函数。
主要是将字符串遍历找到第一数字出现的位置,然后根据row提取一定长度。
1)将mid将字符串一字一字拆分 :mid(A2,row($1:$9),1)
2)将拆分的字符串一字一字的判断是否为数值,是返回true,否返回false
ISNUMBER(1*MID(a2,ROW($1:$9),1))
用1*是表示将文字转为错误值#value
3)查找出现第一个true的位置
MATCH(TRUE,ISNUMBER(1*MID(a2,ROW($1:$9),1)),0)
4)判断拆分的一字一字集合里有几个是数值,到时截取这个长度
COUNT(1*MID(a2,ROW($1:$9),1))
5)最终组成以下函数,因为函数里有用到集合,最终需要同时按ctrl+shift+enter退出函数以完成操作
{=1*MID(a2,MATCH(TRUE,ISNUMBER(1*MID(a2,ROW($1:$9),1)),0),COUNT(1*MID(a2,ROW($1:$9),1)))}
缺点就是被提取的字符串不能出现2出数字串.

方式3
比较不好理解,用到了LOOKUP()、MID()、MIN()、FIND()、ROW()、INDIRECT()、LEN()等函数。
但优点是被提起的字符串组成无要求
1)先将字符串跟0-9的数字连接,这样使用find函数不会返回错误值
FIND({0,1,2,3,4,5,6,7,8,9},C70123456789)
表示0-9在字符串分别处在什么位置
2)查出现第一个数字的位置,使用min+find的函数,即不再1)返回的最小值就是第一个位置
MIN(FIND({0,1,2,3,4,5,6,7,8,9},C70123456789))
3)确定要截取的最大长度
ROW(INDIRECT(1:LEN(C7)))
用len()就是确定字符串有多长
如果c7有6个字符的长度,那么
ROW(INDIRECT(1:LEN(C7)))
=row(inderect(1:6)
={1;2;3;4;5;6}
4)再用mid截取长度分别为{1;2;3;4;5;6}的字符串
5)最后用lookup匹配字符串中的最大值
=LOOKUP(9E+205,--MID($C7,MIN(FIND({0,1,2,3,4,5,6,7,8,9},C70123456789)),ROW(INDIRECT(1:LEN(C7)))))
其中,用到--这个双负号的用途:先用一个负号“-”将截取的字符串(为文本格式)转化为数字(,再将数字转化为正数。

本次介绍以上提取的都是第一次出现的连续数字串,后面出现的数据以上方式无法提取,建议可以再结合替换函数进行
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.ff371.cn/art_1008401.html