FIND、FINDB、SEARCH、SEARCHB函數詳解

_Excel公式教程

標籤: excel公式教程 find函數 findb函數 search函數 searchb函數分類: Excel公式教程-函數篇

文本查找函數包括四個:FIND、FINDB、SEARCH和SEARCHB,它們具有完全相同的語法。

【<strong>語法1】<strong>FIND(find_text,within_text,[start_num]<strong>)

【<strong>語法2】<strong>FINDB(find_text,within_text,[start_num]<strong>)

【<strong>語法3】<strong>SEARCH(find_text,within_text,[start_num]<strong>)

【<strong>語法4】<strong>SEARCHB(find_text,within_text,[start_num]<strong>)

這四個函數都在源文本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。

【<strong>用法】

一、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))


二、FIND、SEARCH與FINDB、SEARCHB的區別在於計量單位的不同:FIND和SEARCH以字符為計量單位;FINDB和SEARCHB以字節為計量單位。具體表現在以下三個方面:

(一)函數返回值是以字符還是字節作為計量單位。例如:

=FIND("Hisense","海信Hisense") 返回3(字符)。

=FINDB("Hisense","海信Hisense") 返回5(字節)。

(二)起始查找位置是以字符還是字節作為計量單位。

例如,單元格A1的值為“客戶級別:甲公司A級”,以下公式查找後面的“級”字是第幾個字符:

=FIND("級",A1,4)

公式返回10(字符)。為了跳過前面的“級”字,把查找起始位置指定從第4個字符開始。

試試用以下公式:

=FINDB("級",A1,4)

公式返回5(字節)。FINDB函數的第三個參數把查找起始位置指定從第4字節開始,未能跳過第一個“級”字的位置。要跳過第一個“級”字查找,至少要把第三個參數改為6:

=FINDB("級",A1,6)

這時公式返回18(字節)。

(三)通配符“?”代表字節還是字符。例如:

=SEARCH("A??","BA中") 返回錯誤值#VALUE!

=SEARCHB("A??","BA中") 返回1

三、判斷文本中是否包含某些特徵字符。

下面的公式,單元格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,)

備註:

字符,字節;是否區分大小寫;是否支持通配符(?,*);全角,半角

FIND、FINDB、SEARCH、SEARCHB函數詳解


分享到:


相關文章: