2024-05-19|閱讀時間 ‧ 約 29 分鐘

文字處理基礎函式(三):FIND / SEARCH

接著介紹可以尋找文字的函式:FINDSEARCH這兩個函式都會回傳指定文字第一次出現的位置,而這位置會以數字表示。

舉例,我想要找「喜特先生」這四個字是否出現在下方的文字裡:

想學習更多 Google 試算表的知識,歡迎來看喜特先生的沙龍!​

我就可以寫:

=FIND("喜特先生", "想學習更多 Google 試算表的知識,歡迎來看喜特先生的沙龍!​")

或是:

=SEARCH("喜特先生", "想學習更多 Google 試算表的知識,歡迎來看喜特先生的沙龍!​")

這兩者的結果都會回傳「25」,代表 FINDSEARCH 都找到了「喜特先生」,告訴你它出現在第 25 個字元。


FIND 跟 SEARCH 差在哪?

FINDSEARCH 的關鍵差異就在「區分字母大小寫與否」,FIND 區分、SEARCH 則不區分。

舉例來說,我想在下方這串字裡用 FINDSEARCH 找到「mr. sheet」:

Google Sheets Tutorial: Mr. Sheet

因為 FIND 會區分大小寫,以 FIND 找「mr. sheet」是否在上面的字串中會顯示錯誤,對 FIND 來說「mr. sheet」跟「Mr. Sheet」不同,有大小寫的差異

不過用 SEARCH 的話就找得到了,因為對 SEARCH 來說「mr. sheet」跟「Mr. Sheet」是一樣的,沒有大小寫的差異

當然,如果你要搜尋的字元是中文字、或是沒有大小寫差異的文字,選 FINDSEARCH 的結果都是一樣的喔。


另外開頭還提到「回傳指定文字第一次出現的位置」,這又是什麼意思?再看一個案例:

想學習更多 Google 試算表的知識,歡迎來看喜特先生的沙龍!​歡迎歡迎喔!

我想用 FIND 找「歡迎」這個字,結果出現「21」:


這邊「21」指的是第一個「歡迎」位於第 21 個字元,但它還有兩個「歡迎」,而 FIND 沒有把它列入、用 SEARCH 函式也會是一樣的結果。那要讓 FINDSEARCH 找第二個「歡迎」在哪,又該怎麼做呢?還有什麼其他要注意的地方嗎?

接下來會說明 FINDSEARCH 的使用方法和一些例子,一起來看看吧!




FIND:找字串,區分大小寫

FIND 函式用來尋找某字串中,特定文字第一次出現的位置,會區分大小寫


語法

=FIND(要找的特定字串, 要找的文字, [從第 N 個字元開始找])
  • 要找的特定字串:這邊別忘了加上雙引號,代表「文字」的資料格式。
  • 要找的文字:這邊也要加上雙引號喔!
  • [從第 N 個字元開始找]:選填,可以設定 FIND 要從第 N 個字元開始找,預設是 1。

如果 FIND 沒找到關鍵字,就會回傳「#VALUE!」錯誤。

這邊提一下剛剛「Google Sheets Tutorial: Mr. Sheet」的例子,帶你了解 FIND 實際區分大小寫的狀況如何。


這邊我想找 A2 是否含有「mr. sheet」這個詞,我就可以在 B2 寫:

=FIND("mr. sheet", A2)


結果顯示「#VALUE!」:


這是因為以 FIND 找「mr. sheet」是否在上面的字串中就會顯示錯誤,因為對 FIND 來說「mr. sheet」跟「Mr. Sheet」不同,有大小寫的差異。




SEARCH:找字串,忽略大小寫

SEARCH 函式跟 FIND 函式一樣,可以讓在 Google 試算表中用來尋找某字串中,特定文字第一次出現的位置,但是不會區分大小寫


語法

=SEARCH(要找的特定字串, 要找的文字, [從第 N 個字元開始找])
  • 要找的特定字串:這邊別忘了加上雙引號,代表「文字」的資料格式。
  • 要找的文字:這邊也要加上雙引號喔!
  • [從第 N 個字元開始找]:選填,可以設定 SEARCH 要從第 N 個字元開始找,預設是 1。

如果 SEARCH 沒找到關鍵字,就會回傳「#VALUE!」錯誤。

沒錯,SEARCH 的語法跟 FIND 一樣!但因為它不會區分大小寫,SEARCH 的容錯程度比 FIND 高一點。




FIND 和 SEARCH 的應用場景

這邊會舉一些 FINDSEARCH 常用狀況!(不考慮大小寫的狀況,我都一律寫 FIND 唷)


檢查文字中是否包含特定字串

假如說我想要找一個清單裡,有沒有「茶」這個字:


我就可以在 B2 這寫 FIND,先從 A2 找是否有「茶」這個字:

=FIND("茶", A2)


這邊回傳了「4」,代表「茶」出現在 A2 的第 4 個字元。

我們這邊可以再搭配 IFISERROR,讓它回傳「否」跟「是」:

=IF(ISERROR(FIND("茶", A2)), "否", "是")

這邊的意思是,如果 FIND 的結果發生錯誤(也就是找不到的狀況下),就會回傳「否」,不然就回傳「是」。來看看結果:

資料來源:萬波島嶼紅茶專門店


然後把這個算式拉下來就完成了!

資料來源:萬波島嶼紅茶專門店




找第二個關鍵字在哪

我們來回顧一下開頭提到的「找第二個歡迎」:


這邊試著找找看第二個「歡迎」在哪邊吧!

先用 FIND 找第一個「歡迎」在哪:

=FIND("歡迎", A2)


結果出現「21」,是第一個「歡迎」的位置。

這裡就可以用 FINDSEARCH 的第三個參數,讓它們從指定位置開始往後找第二個「歡迎」。現在已經知道第一個「歡迎」在第 21 個字元,那麼只要讓 FIND 在第 22 個字元後找就行了!

所以我修改了一下這邊的算式:

=FIND("歡迎", A2, FIND("歡迎", A2) + 1)

這邊的第三個參數就再用 FIND 找一次、讓它回傳第一個「歡迎」的結果後,再加 1 就是了。

如果要找第三個、第四個、第 N 個呢?是可以用同樣的方式去找,但我不太推薦,因為算式會寫得很長。比如說我們要找第三個,就會變這樣:

=FIND("歡迎", A2, FIND("歡迎", A2, FIND("歡迎", A2) + 1) + 2)


所以我會搭配 CHARSUBSTITUTE 來做,比較好讀、也比較有彈性:

=FIND(CHAR(999), SUBSTITUTE(A2, "歡迎", CHAR(999), 3))

(不確定 SUBSTITUTE 是什麼的話,下一篇會寫喔!)




搭配 MID 函式,擷取字串的一部分

最後,我們還可以拿之前介紹的 MID 函式跟 FIND 搭配,讓它擷取指定字串的一部分。這也是個滿常見的應用場景!

我想取得這邊 Email 清單裡的帳號名,也就是「@」前面的字串:


這邊就可以在 B2 寫:

=MID(A2, 1, FIND("@", A2) - 1)

這算式的意思是讓 MID 先從 A2 的第一個字開始取,之後用 FIND 找到「@」的所在位置後減 1,使它不包含「@」字本身。

來看看效果:


這邊一樣把 B2 的算式拉下來,就取完囉!




同場小加映:FINDB、SEARCHB

這兩個函式和之前提過的 LEFTMIDRIGHTLEN 一樣都有它的 B 版:

  • FINDB:以位元組為單位,尋找某字串中,特定文字第一次出現的位置,區分大小寫。
  • SEARCHB:以位元組為單位,尋找某字串中,特定文字第一次出現的位置,不區分大小寫。

舉個小例子,用 FINDFINDB 找「喜特先生」的所在位置:


結果有點不一樣,對吧!這是因為 FIND 是「以字為單位」、而 FINDB 則是「以位元組為單位」,會把中文字(全形字元)當 2 個字來算,所以看起來比 FIND 更遠。

不過我個人幾乎不用 FINDBSEARCHB,畢竟用 FINDSEARCH 就可以解決大多數的狀況了。




最後最後,要提一下 FINDSEARCH 的缺點:沒那麼有彈性。

之前介紹 QUERY 的時候,在 LIKE 可以用底線(_)跟星號(*)做一些模糊搜尋,讓搜尋資料更有彈性一點,可惜 FINDSEARCH 沒辦法做這種操作。

而這個可以用常規表達式的相關函式來解決,讓找字這件事變得更輕鬆!之後喜特先生也會推出一系列的教學文,進一步介紹常規表達式是什麼,還有REGEXMATCHREGEXREPLACEREGEXEXTRACT 這三個函式怎麼使用。敬請期待啦!




最後畫重點!

  • FIND 函式與 SEARCH 函式都可用於尋找文字字串中指定字串的位置。
  • FIND 函式會區分大小寫,而 SEARCH 函式會忽略大小寫。




如果你喜歡這次的文章,歡迎你透過這些方法支持我:

  • 按下愛心、按下儲存
  • 留言告訴我你的想法
  • 加入喜特先生的官方沙龍,即時看到我發布的教學
  • 付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
  • 追蹤喜特先生的 Facebook
  • 這邊小額贊助我的創作!

想要看更多文章的話,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!

我是喜特先生,Mr. Sheet,我們下個教學見!



分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.