支持通配符的查找函数search和searchb的用法
今天说一个与find函数功能差不多的函数,就是search函数。它可以返回一个指定字符或者文本字符串在另一个字符串第一次出现的位置。虽然它和find有相似的功能,但还是有一些区别的。下面会详细说明。
-01-
函数说明
它的语法结构如下,有3个参数;像len和lenb一样也有2种形式,一种是字符型,一种是字节型。
SEARCH(find_text,within_text,[start_num])
SEARCHB(find_text,within_text,[start_num])
find_text 必需。要查找的文本。
within_text 必需。要在其中搜索 find_text 参数的值的文本。
start_num 可选。within_text 参数中从之开始搜索的字符编号。
SEARCH(要查找的字符串,在其中查找的字符串,[从第几个字符或字节查找])
这个函数像find一样也有很多注意事项:
SEARCH 和 SEARCHB 函数不区分大小写。如果要执行区分大小写的搜索,可以使用 FIND 和 FINDB 函数。
可以在 find_text 参数中使用通配符问号 (?) 和星号 (*)。问号匹配任意单个字符;星号匹配任意一串字符。如果要查找实际的问号或星号,请在字符前键入波形符 (~)。
如果找不到 find_text 的值,则返回 错误值 #VALUE!。
如果省略了 start_num 参数,则假设其值为 1。如果第3参数省略,则默认为1。
如果 start_num 不大于 0(零)或大于 within_text 参数的长度,则返回 错误值 #VALUE!。
-02-
示例解释
如下图所示,在B1单元格中输入公式=SEARCH("S",A1,2),结果为10。意思是从A1单元格的第2个字符开始向右查找"S",并返回"S"第一次出现的位置。也就是从“t”开始向右查找,找到第一个"S",返回它在A1单元格字符串中的位置10。我第1参数是大写的"S",而找到的第一个"s"是小写的。说明search不区分大小写。
在B1单元格中输入公式=SEARCH("s",A1),结果为1。第3参数忽略不写,默认为1。意思就是从A1单元格的第1个字符开始向右查找"s",并返回它第一次出现在A1单元格的位置。
在B1单元格中输入公式=SEARCH("t?",A1),结果为2。意思就是从A1单元格的第1个字符开始向右查找"t?","t?"代表以t开始,任意字符结尾的2个字符,并返回它第一次出现在A1单元格的位置。下图可以看到,以t开始,任意字符结尾的2个字符有3个,但是只返回第一次出现的位置,也就是2。
-03-
具体应用
1.统计以131开头,以8结尾的手机号有几个
在B5单元格中输入公式=COUNT(SEARCH("131???????8",A5:A9)),按ctrl+shift+enter三键。由于要统计总个数,肯定要用到数组。search的第1参数是"131???????8",中间7个?代表任意7个字符,当然这里代表的是任意数字,这样就组成了手机号;然后在A5:A9这个区域的每个单元格中查找,找不到的返回错误值,找到的返回1个数字;最后用count统计数字的个数就是要统计的手机号的个数。
在C5单元格中输入公式=COUNT(SEARCH("131*8",A5:A9)),结果为3。为什么这种写法不行呢?因为"131*8"在A9单元格中也能找到,如下第2图所示。这种写法它的长度不固定,不能确保是11位。你还能想到其他的方法吗?
2.提取数字
A列是一些字符串,现要求将数字提取出来。提取数字的方法有很多,今天主要用searchb这个函数。在B14单元格中输入公式=MIDB(A14,SEARCHB("?",A14),2*LEN(A14)-LENB(A14)),向下填充。
注意,这里SEARCHB("?",A14)是按字节的方式查找,"?"此时代表是单个字节,而不是单个字符。这样就把第1个单字节字符的位置找出来了,这里也就是数字的位置。
然后需要用mid将数字提取出来,由于这里用字节的方式,所以mid也要改成midb。要提取的起始位置已经用SEARCHB("?",A14)算出来了,现在的问题是怎么计算提取的长度。
提取的长度用之前说的2*LEN(A14)-LENB(A14)来计算。这样这个函数就可以组合在一起了。
好了,search和searchb就讲到这里了,主要是它通配符的用法,如果不用通配符,find基本就可以实现。
如果对你有帮助,或者你喜欢的话,帮我打赏或者转发一下,你的支持就是我的动力!