在 Excel 中,查找指定字符在源字符串中的位置,既可以用 Find函數,也可以用 FindB函數,它們都有三個參數,所不同的是,前者把漢字、字母和數字都算一個字符,後者把漢字算兩個字節,數字和字母算一個字節。以下就是 Excel Find函數與FindB函數的使用方法及實例,含基本使用方法、在多行中動態查找方法和用數組一次查找多個值實例,操作所用版本均為 Excel 2016。
一、Find函數和FindB函數語法
(一)Find函數
表達式:FIND(Find_Text, Within_Text, [Start_Num])
中文表達式:FIND(查找文本, 源文本, [查找開始位置])
(二)FindB函數
表達式:FINDB(Find_Text, Within_Text, [Start_Num])
中文表達式:FINDB(查找文本, 源文本, [查找開始位置])
(三)說明:
1、如果 Find_Text 為空(""),則返回 1;另外,Find_Text 不能包含任何通配符。
2、Start_Num 為可選項,如果省略,則默認從第一個字符開始查找。Start_Num 小於等於 0 與大於 Within_Text 長度,Find 和 FindB 都返回 #VALUE! 錯誤值。
3、Find 和 FindB 都區分大小寫,也就是同一個字母的大寫和小寫算兩個字母。Find 的 Start_Num 無論是漢字、字母還是數字都以一個字符算;而 FindB 的 Start_Num 漢字以兩個字節算,字母和數字以一個字節算。
二、Find函數的使用方法及實例
(一) Find_Text 為空("")且省略 Start_Num 的實例
1、選中 B1 單元格,輸入公式 =FIND("",A1),按回車,返回 1;雙擊 B1,把公式改為 =FIND("",A1,4),按回車,返回 4;操作過程步驟,如圖1所示:
2、公式說明:第一個公式 =FIND("",A1) 查找文本為空,默認返回第一個字符的位置,所以返回 1;第二個公式 =FIND("",A1,4),查找文本也為空,但從第 4 個字符開始查找,所以返回在「Excel 2016 教程」中指定的位置 4。
3、查找空格(" ")
A、把公式 =FIND(" ",A1,4) 複製到 B2 單元格,如圖2所示:
B、按回車,返回 6,正是「Excel 2016 教程」中第一個空格的位置,如圖3所示:
(二)Start_Num 小於等於 0 與大於 Within_Text 長度的實例
1、把公式 =FIND("2016",A1,0) 複製到 B1 單元格,按回車,返回 #VALUE! 錯誤;把公式改為 =FIND("2016",A1,15),按回車,也返回 #VALUE! 錯誤;操作過程步驟,如圖4所示:
2、說明 Start_Num 小於等於 0 與大於 Within_Text 長度,Find函數都返回 #VALUE! 錯誤。
(三)Find函數區分大小寫的實例
1、把公式 =FIND("e",A1) 複製到 B1 單元格,按回車,返回 4;把公式改為 =FIND("E",A1),按回車,返回 1,如圖5所示:
2、查找位置都默認從 1 開始,但查找小寫 e 時,返回的 4,正是「Excel 2016 教程」中小寫 e 的位置;查找大寫 E 時,返回的是 1,正是「Excel 2016 教程」中大寫 E 位置。
(四)查找不存的文本返回錯誤處理
1、把公式 =FIND("2013",A1) 複製到 B1 單元格,按回車,返回 #VALUE! 錯誤,因為「Excel 2016 教程」沒有 2013,操作過程步驟,如圖6所示:
2、如果用 =FIND("2013",A1) 作為 if 的條件,返回 #VALUE! 錯誤,if 將無法判斷真假,如這個公式 =IF(FIND("2013",A1),"2013","2016"),如圖7所示:
3、如果條件 FIND("2013",A1) 為真將返回 2013,否則返回 2016,但由於返回 #VALUE! 錯誤,導致最終也返回 #VALUE! 錯誤,如圖8所示:
4、只要加一個判斷 Find 返回值是否為數字的 IsNumber函數,if 就能返回正確值,把公式改為 =IF(ISNUMBER(FIND("2013",A1)),"2013","2016"),按回車,返回 2016,操作過程步驟,如圖9所示:
5、由於 FIND("2013",A1) 返回 #VALUE! 錯誤,#VALUE! 不是數字,因此 IsNumber(#VALUE!) 返回假,if 的條件為假,所以返回 2016。
(五)用 Mid 與 Find 截取指定字符
1、從指定字符截取到末尾。假如要從「Excel 2016 教程」中截取 2016 以後的所有文字。把公式 =MID(A1,FIND("2016",A1),10) 複製到 B1 單元格,按回車,返回「2016 教程」,操作過程步驟,如圖10所示:
2、截取中間指字符串。假如要從「Excel 2016 數據透視表教程」中截取「數據透視表」。把公式 =MID(A1,FIND("數據",A1),FIND("透視表",A1,FIND("數據",A1)) +3-FIND("數據",A1)) 複製到 B1 單元格,按回車,返回「數據透視表」,操作過程步驟,如圖11所示:
公式說明:
A、公式中第一個 FIND("數據",A1) 用於返回要截取字符串的開始位置。
B、FIND("透視表",A1,FIND("數據",A1))+3-FIND("數據",A1) 用於返回要截取字符串的長度,先用 FIND("透視表",A1,FIND("數據",A1)) 返回要查找字符串「數據透視表」最後三個字所在位置,由於查找「透視表」是三個字,而 Find 返回「透視表」的是「透」字的位置」,因此要加 3;然後減掉要截取字符串開始字符「數據」所在位置,從而返回要截取字符串「數據透視表」。
提示:如果要從文字很多的段落中截取指定字符,FIND("透視表",A1,FIND("數據",A1)) 中才用 FIND("數據",A1) 找到查找開始位置,否則開始位置從 1 開始即可,這樣有利於提高效率。
(六)用 Find函數在多行中動態查找
1、假如要在服裝銷量表的「產品名稱」中查找是否包含「分類」。把公式 =IF(ISERR(FIND($C$2:$C$12,B2)),"不包含","包含") 複製到 G2 單元格,按回車,返回「包含」;把滑鼠移到 G2 右下角的單元格填充柄上,按住左鍵,往下拖,則所經過單元格返回相應值;操作過程步驟,如圖12所示:
2、公式說明:公式中 $C$2:$C$12 是對 C2 到 C12 的絕對引用,即往下拖時,每次從 C2 到 C12 中返回一個值;B2 是相對引用,往下拖時會變為 B3、B4、……;FIND($C$2:$C$12,B2) 是在 C2 中找 B2,往下拖時,B2 變 B3,則在 C3 中找 B3,以此類推;如果沒有找到,Find函數返回 #VALUE! 錯誤;用 IsErr函數判斷是否返回錯誤,如果返回錯誤,則返回「不包含」否則返回「包含」。
(七)Find 用數組一次查找多個值
1、假如要在「Excel 2016 教程」中查找是否包含 0、2、教。把公式 =SUM(ISNUMBER(FIND({0,2,"教"},A1))*1) 複製到 B1 單元格,按回車,返回 3,操作過程步驟,如圖13所示:
2、公式說明:
A、用 Find 查找多個值,可以用數組,即 FIND({0,2,"教"},A1),表示要在 A1 中查找 0、2、教,查找順序為:從 0 開始查找,每次查找一個,找到返回所在位置,沒有找到返回 #VALUE! 錯誤。
B、FIND({0,2,"教"},A1) 最終返回 {8,7,12},則公式變為 =SUM(ISNUMBER({8,7,12})*1);用 IsNumber 判斷,由於數組中全是數字,所以全返回真,公式變為 =SUM({True,True,True}*1),再把 1 與數組中的每個 True 相乘,由於 True 轉為數值為 1,所以公式變為 =SUM({1,1,1}),最終求和結果為 3。
C、FIND({0,2,"教"},A1) 的意思是,如果 A1 中只有 0、2 或「教」其中之一,則返回 1;如果同時有兩個,則返回 2;如果同時有三個,則返回 3。
三、FindB函數的使用方法及實例
1、把公式 =FINDB("2016",A1) 複製到 B1 單元格,按回車,返回 7;雙擊 B1 單元格,把公式改為 =FINDB("教",A1,6),按回車,返回 12;再次雙擊 B1 單元格,把公式改為 =FINDB("程",A1,6),按回車,返回 14;操作過程步驟,如圖14所示:
2、說明:第一個公式 =FINDB("2016",A1) 返回 7 ,說明,FindB函數把每個字母算一個字節;第二個公式 =FINDB("教",A1,6) 返回 12,說明 FindB函數把每字母和數字都算一個字節;第三個公式 =FINDB("程",A1,6) 返回 14,說明 FindB函數把每個漢字算兩個字節。除操作中的實例外,FindB函數的其它用法與Find函數相同。