FIND、FINDB、SEARCH、SEARCHB函数详解_Excel公式教程
(2016-03-22 21:51:21)
标签:
excel公式教程find函数findb函数search函数searchb函数 |
分类: Excel公式教程-函数篇 |
文本查找函数包括四个:FIND、FINDB、SEARCH和SEARCHB,它们具有完全相同的语法。
【语法1】FIND(find_text,within_text,[start_num])
【语法2】FINDB(find_text,within_text,[start_num])
【语法3】SEARCH(find_text,within_text,[start_num])
【语法4】SEARCHB(find_text,within_text,[start_num])
这四个函数都在源文本within_text中查找子文本find_text,并返回find_text在within_text中出现的位置。它们的区别在于:
(1)函数FIND和SEARCH是以字符为计量单位;而函数FINDB和SEARCHB是以字节为计量单位。
(2)函数FIND和FINDB区分字母大小写,不支持通配符;而函数SEARCH和SEARCHB不区分字母大小写,可用通配符进行模糊查找。
参数start_num是一个数字值,小数部分截尾取整。用于指定起始查找位置。如果省略start_num,则从源文本within_text的第一个字符(或字节)开始查找。
函数返回find_text在within_text中的位置,该位置总是从within_text的第一个字符(或字节)开始计数,而不是从start_num开始计数的。
如果子文本find_text是空文本"",函数返回查找的起始位置,即1或者start_num。
如果找不到find_text,函数返回错误值#VALUE!。
Start_num的取值范围必须符合以下条件,否则函数返回错误值#VALUE!:
(1)Start_num必须大于等于1;
(2)如果源文本within_text不是空文本,截尾取整后的start_num不能大于within_text的长度,或者说,start_num必须小于within_text的长度加1;
(3)如果源文本within_text是空文本,截尾取整后的start_num必须是1,或者说,start_num必须大于等于1且小于2。例如,=FIND("","",1)返回1。
【用法】
一、FIND与SEARCH、FINDB与SEARCHB的区别在于两个方面:
(一)FIND和FINDB区分字母大小写;而SEARCH和SEARCHB不区分字母大小写。
例如,在单元格A1输入一钢管型号,比如“镀锌管 DN25”或“镀锌管 dn25”等。以下公式可查找“DN”、“Dn”、“dn”或“dN”在文本中的位置:
=SEARCH("DN",A1)
如果改用FIND函数,则只能查找“DN”的情况,如果输入成其余三种情况,公式都返回错误值#VALUE!:
=FIND("DN",A1)
需要注意的是,文本查找函数是区分半角、全角字符的。如果单元格A1输入成“镀锌管DN25”或“镀锌管dn25”等,上面的公式将返回错误值#VALUE!。我们可以把公式改为:
=SEARCH("DN",A1)
在这个例子,如果想用一个公式能够同时查找半角和全角字母,可用以下公式:
=IF(ISERR(SEARCH("DN",A1)),SEARCH("DN",A1),SEARCH("DN",A1))
Excel 2007以上版本可改用以下公式:
=IFERROR(SEARCH("DN",A1),SEARCH("DN",A1))
使用下面的公式则更为简单,公式中先用ASC函数把A1的字母统一转换成半角字符,然后再查找:
=SEARCH("DN",ASC(A1))
(二)FIND和FINDB不支持通配符;而SEARCH和SEARCHB可用通配符进行模糊查找。
例如:假设单元格A1的值为“小天鹅TG70-1411LPD滚筒洗衣机”,以下公式判断该单元格是不是小天鹅品牌的洗衣机:
=ISNUMBER(SEARCH("小天鹅*洗衣机",A1))
关于通配符更详细的介绍,请参阅:http://blog.sina.com.cn/s/blog_14e89401f0102wc21.html
二、FIND、SEARCH与FINDB、SEARCHB的区别在于计量单位的不同:FIND和SEARCH以字符为计量单位;FINDB和SEARCHB以字节为计量单位。具体表现在以下三个方面:
(一)函数返回值是以字符还是字节作为计量单位。例如:
=FIND("Hisense","海信Hisense")
=FINDB("Hisense","海信Hisense")
(二)起始查找位置是以字符还是字节作为计量单位。
例如,单元格A1的值为“客户级别:甲公司A级”,以下公式查找后面的“级”字是第几个字符:
=FIND("级",A1,4)
公式返回10(字符)。为了跳过前面的“级”字,把查找起始位置指定从第4个字符开始。
试试用以下公式:
=FINDB("级",A1,4)
公式返回5(字节)。FINDB函数的第三个参数把查找起始位置指定从第4字节开始,未能跳过第一个“级”字的位置。要跳过第一个“级”字查找,至少要把第三个参数改为6:
=FINDB("级",A1,6)
这时公式返回18(字节)。
(三)通配符“?”代表字节还是字符。例如:
=SEARCH("A??","BA中")
=SEARCHB("A??","BA中")
三、判断文本中是否包含某些特征字符。
下面的公式,单元格A1如果不包含“绝缘”,则返回TRUE;包含“绝缘”则返回FALSE。
=ISERR(FIND("绝缘",A1))
下面的公式,单元格A1如果包含"绝缘",则返回TRUE;没包含“绝缘”则返回FALSE。
=ISNUMBER(FIND("绝缘",A1))
下面的数组公式,如果A1中不包含“海尔”和“美的”,返回TRUE,否则返回FALSE。
{=AND(ISERR(FIND({"海尔","美的"},A1)))}
下面的数组公式,如果A1中包含“海尔”或“美的”,返回TRUE,否则返回FALSE。
{=OR(ISNUMBER(FIND({"海尔","美的"},A1)))}
在博文《ISNUMBER函数详解》和《ISERR函数详解》中有更多的这种例子。
四、截取文本中不确定位置的字符。
假设单元格A1是文本“Ceramic Insulators#124-TD45-87”,以下公式截取#号前面的文本“Ceramic Insulators”:
=LEFT(A1,FIND("#",A1)-1)
=MID(A1,1,FIND("#",A1)-1)
=REPLACE(A1,FIND("#",A1),99,)
以下公式截取#号后面的文本“124-TD45-87”:
=RIGHT(A1,LEN(A1)-FIND("#",A1))
=MID(A1,FIND("#",A1)+1,99)
=REPLACE(A1,1,FIND("#",A1),)
五、利用“SEARCHB+?”,查找第1个单字节字符的起始字节位置。
假设单元格A1是文本“小明1234”,下面的公式返回5:
=SEARCHB("?",A1)
于是,我们可以对形如“双字节+单字节”的文本(比如“汉字+数字”“汉字+英文”等)进行拆分。
继续用上面的例子,以下公式截取汉字部分的“小明”:
=LEFTB(A1,SEARCHB("?",A1)-1)
=MIDB(A1,1,SEARCHB("?",A1)-1)
=REPLACEB(A1,SEARCHB("?",A1),99,)
以下公式截取数字部分的“1234”:
=RIGHTB(A1,LENB(A1)-SEARCHB("?",A1)+1)
=MIDB(A1,SEARCHB("?",A1),99)
=REPLACEB(A1,1,SEARCHB("?",A1)-1,)
上一篇博文《LEN、LENB函数详解》介绍了其他拆分“双字节+单字节”和“单字节+双字节”文本的方法。