做一些解释
代码如下 | 复制代码 |
LEN(A2) – LEN(SUBSTITUTE(A2, ” “, “”) 获取字符串中空格的个数 SUBSTITUTE(A2, ” “, “-”, step1) 将最后一个空格替换为”-” FIND(“-”, step2) 找到最后一个空格的位置 RIGHT(A2, LEN(A2) – step3) 返回最后一个空格之后的字符串 IF(ISERROR(FIND(” “, A2)), A2, step4) 字符串中没有空格时不做处理,避免出现#VALUE!的结果 |
利用上面的函数我们来看一个查找字符串中*星号位置并取出
所以,要想查找字符串中的,*星号和?问号,必须在其前面加上这样的一个符号 ~ 方能找到。
上表中,每个单元格都包含两个*星号,同时还包含三组数字,但是,每组数字的长度都不一样,有的长有的短。现在的问题是,如何把每个单元格中被*星号隔开的每数字分别取出来?
一、问题的分析
要想取出被两个*星号隔开的三组数字,关键的问题在于,如何知道并获取两个*星号分别处于字符串中的哪个位置。
知道两个*星号的位置后,我们就可以使用截取函数将三组数字分别取出来。
二、获取两个*星号的位置
获取某个字符在字符串中所处的位置,可以使用SEARCH和SEARCHB函数来查找位置。
两个函数的语法相同,如下:
SEARCH(find_text,within_text,start_num)
SEARCHB(find_text,within_text,start_num)
不过,两个函数的区别在于,前者在查找的时候,把一个汉字的长度当作一个字符,后者则是以字节的方式来查找,一个汉字当两个字节,所以,一个汉字的长度就为2。一般情况下,在中文英文数字特殊字符混合的字符串中查找,应该使用SEARCH函数。
把以上两个函数翻译成中文,其语法为:
SEARCH(要找的字符,包含字符的字符串,从串中的第几个位置开始找)
SEARCHB(要找的字符,包含字符的字符串,从串中的第几个位置开始找)
有了如上的函数基础与理论指导,下面,我们开始查找两个星号的位置吧。
①第一个*星号的位置
通过函数=SEARCH("~*",A1)即可获取第一个星号的位置,处于第5位。
②第二个*星号的位置
第二个*星号的位置查找,就比较困难了,公式有点绕口令的感觉。
总之,公式如下:=
代码如下 | 复制代码 |
SEARCH("~*",A1,SEARCH("~*",A1)+1) |
看到了吧?上述的公式比较复杂,但是,却也很好理解。
通过公式=SEARCH("~*",A1)可获得第一个位置,那么,再第一个位置的基础上加1,从这个位置开始继续往下找,就可以找到第二星号的位置,所以,公式就是上图中稍微绕口的函数了。
三、从带有星号的字符串中提取数字
有了一二的基础,现在,我们该是提取数字了。
①提前第一个星左边的数字公式
代码如下 | 复制代码 |
=LEFT(A1,SEARCHB("~*",A1)-1) |
②提取中间那个数字的公式
代码如下 | 复制代码 |
=MID(A1,SEARCHB("~*",A1)+1,(SEARCHB("~*",A1,SEARCHB("~*",A1)+1))-SEARCHB("~*",A1)-1) |