与match类似的文本查找函数find的用法
今天说下文本函数find的用法,这个函数和文本提取函数left,right,mid相结合,可以发挥很大作用。
-01-
函数说明
find这个函数是返回第一个字符串在第二个字符串出现的起始位置的值,该值从第二个字符串的第一个字符算起。它的函数写法如下图,有3个参数。
find_text 必需。 要查找的文本。
within_text 必需。 包含要查找文本的文本。
start_num 可选。 指定开始进行查找的字符。 within_text 中的首字符是编号为 1 的字符。 如果省略 start_num,则假定其值为 1。
这个函数的注意事项比较多:
FIND区分大小写,并且不允许使用通配符。
如果 find_text 为空文本 (""),则 FIND 会匹配搜索字符串中的首字符(即编号为 start_num 或 1 的字符)。也就是如果find_text 为空文本 (""),find返回第三参数的值。
如果 within_text 中没有 find_text,则FIND返回错误值 #VALUE!。也就是如果在第2参数中找不到第1参数,find返回错误值。
如果start_num不大于0,则FIND返回 错误值 #VALUE!。也就是如果第3参数小于等于0,find返回错误值。
如果start_num大于within_text的长度,则FIND返回错误值 #VALUE!。也就是第3参数大于第2参数的字符串长度,find返回错误值。
可以使用 start_num 来跳过指定数目的字符。也就是通过第3参数来选择要在第二参数查找的起始字符位置。
-02-
示例解释
在B1单元格中输入如下公式,结果为3。意思是在A1单元格的字符串中查找“刘卓”这个字符串,找到后,返回“刘”的位置,“刘”在A1单元格的这个字符串的位置是3,所以返回3。这里第3参数1的意思是,从A1单元格的这个字符串的第1个字符开始查找“刘卓”。
在B1单元格中输入如下公式,结果为错误值。为什么呢?从A1单元格的字符串的第4个字符开始往后查找“刘卓”,肯定找不到返回错误值。
在B1单元格中输入如下公式,结果为错误值。因为第3参数的值大于第2参数的字符个数。第2参数一共就6个字符,你让它从第7个开始查肯定是查不到的。
在B1单元格中输入如下公式,结果为1。意思是在A1单元格的字符串中,从第一个字符开始查找“a”,发现2个“a”,只返回第1个“a”的位置。
在B1单元格中输入如下公式,结果为5。意思是在A1单元格的字符串中,从第1个字符开始查找“A”,发现它在字符串的位置为5。从上面2个示例,可以发现find区分大小写。
好了,find的原理和其他的注意事项,你自己去验证一下。下面讲几个具体应用。
-03-
具体应用
1.提取城市名
a列是一些城市和它的特色,要在b列中提取出城市名。公式为B3=LEFT(A3,FIND("市",A3))。先通过find找出“市”的位置,然后再用left提取出城市名。
2.计算不重复的字符数
在a列中为一些字符串,要在b列中计算出不重复的字符数。比如在A18单元格中,“卓”重复出现2次,不重复的字符为“我”,“是”,“刘”,“卓”,“哎”这5个。公式为B18=COUNT(FIND(CHAR(ROW(A:A)),A18)),ctrl+shift+enter三键结束。这里用了find的数组用法,find的3个参数都支持数组。
解释一下这个公式,ROW(A:A)是返回A列中每一个单元格的行号,即A1,A2,……A最后一个的行号,也就是得到一个{1;2;3……最后一个数字}的数组。
CHAR(ROW(A:A))就是将数字数组转换成字符数组,因为每个数字对应一个字符。而且是不重复的字符数组。也就是在这个字符数组中,每个字符都不重复。
FIND(CHAR(ROW(A:A)),A18)就是在A18这个字符串中找每个不重复的字符,找不到的返回错误值,找到的返回一个数字。最后用count统计数字的个数就是不重复的字符的个数。
好了,关于find这个函数的原理和用法,今天就讲这些。其实它的数组用法还很强大。