茶飲店的外送平台每週會匯出一批客人留言和地址,這份範例資料有五則留言、六筆地址,要整理成「每則留言屬於哪一類」「各類有幾則」「地址的縣市」三樣東西。這篇就用 AI 函式和傳統函式各做一次,看看哪一件事該交給誰。AI 函式怎麼輸入、怎麼生成,以及需要哪些方案,在 AI 函式入門 講過了,這邊直接開工。
留言分類
留言放在 A1:B6,C 欄要放分類:
| A | B | |
|---|---|---|
| 1 | 編號 | 評論 |
| 2 | 1 | 蘋果紅茶很香,但今天等了四十分鐘 |
| 3 | 2 | 杯子漏水,整個袋子都濕了 |
| 4 | 3 | 一杯八十五有點貴,不過味道不錯 |
| 5 | 4 | 店員很親切,會主動問甜度 |
| 6 | 5 | 等很久,而且價格又漲了 |
用 AI 的話,C2 這樣寫:
請 Gemini 從固定選項挑一個分類
=AI(
"這是茶飲店的客人留言。請只從這四個詞挑一個回答,不要加標點或解釋:出餐速度、價格、服務、其他。",
B2
)這條提示我花心思的地方有兩處。一是把選項直接列出來,不然它可能自己發明「口味」「包裝」這些標籤,之後很難統計。二是要求不加標點和解釋,因為輸出是文字,多一個句號,之後 COUNTIF 就對不上了。
留言 2「杯子漏水」和留言 5「等很久,而且價格又漲了」,我自己都不確定該歸哪一類。這就是 AI 適合的地方:規則講不清楚、但人一看就有感覺的判斷。不過它每次的答案不保證一樣,所以我會把這欄當成「第一版標籤」,不當成最終答案。即使提示限定了四個選項,AI 偶爾還是會出現清單外的字(例如「抱怨出餐速度」「包裝問題」),統計前要先檢查標籤,見 陷阱篇。
規則寫得出來的時候,用 IFS
如果你的分類其實只是看有沒有某幾個字,那用確定性的函式更好。REGEXMATCH 判斷文字有沒有符合,IFS 由上往下挑第一個成立的(IFS 的細節在 IFS 與 SWITCH 實戰):
看留言有沒有出現特定字,決定分類
=IFS(
REGEXMATCH(B2, "等|久|慢"), "出餐速度",
REGEXMATCH(B2, "貴|價"), "價格",
TRUE, "其他"
)C2:C6 填滿之後會得到:
| 列 | 評論 | 分類 |
|---|---|---|
| 2 | 蘋果紅茶很香,但今天等了四十分鐘 | 出餐速度 |
| 3 | 杯子漏水,整個袋子都濕了 | 其他 |
| 4 | 一杯八十五有點貴,不過味道不錯 | 價格 |
| 5 | 店員很親切,會主動問甜度 | 其他 |
| 6 | 等很久,而且價格又漲了 | 出餐速度 |
第 6 列同時提到慢和貴,IFS 只回第一個成立的,所以是「出餐速度」。第 3 列的「漏水」我沒寫進規則,掉進「其他」。這就是規則版的樣子:結果每次一樣,但你沒預想到的說法它就接不住。另外要注意,這條規則只有出餐速度、價格、其他三類,AI 的提示多了「服務」:第 5 列(留言 4)「店員很親切」在 IFS 是「其他」,AI 則可能答「服務」。兩邊的分類標準不同,不能直接逐列比較。
要統計各類有幾則,就用 COUNTIF:
數出餐速度類有幾則
=COUNTIF(C2:C6, "出餐速度")結果是 2。這個 COUNTIF 不管 C 欄是 IFS 還是 AI 生成的都能用,只要標籤字一模一樣,所以前面才要把 AI 的輸出限定在固定選項。
摘要一批留言
摘要是 AI 最順手的任務,因為沒有標準答案,也沒有確定性的函式做得到。範圍參數可以直接給一整欄:
把 B2:B6 的留言摘成一句話
=AI("用一句話摘要這些客人留言的共同抱怨與稱讚,不要超過四十個字。", B2:B6)摘要的字我就不在這裡列了,因為每次跑出來的措辭可能不同。我的習慣是把摘要當成「讀留言前的導讀」,真的要寫進週報的數字,像各類幾則,還是回頭用上一節的 COUNTIF 算。
從地址取出縣市
地址放在 A1:A7,要在 B 欄取出縣市:
| A | |
|---|---|
| 1 | 地址 |
| 2 | 台北市大安區和平東路二段106號 |
| 3 | 新北市板橋區文化路一段188號 |
| 4 | 新竹縣竹北市光明六路10號 |
| 5 | 臺南市東區府東路20號 |
| 6 | 寄到公司就好,板橋文化路那邊 |
| 7 | 高雄市前鎮區中山二路5號 |
這種「縣市永遠在最前面兩個字加市或縣」的資料,我會直接用 REGEXEXTRACT,不找 AI。正規表示式的寫法可以回頭看 REGEX 與 AI 協作指南,這邊的模式很短:
取出開頭兩個字加上市或縣
=REGEXEXTRACT(A2, "^.{2}[市縣]")^ 表示從開頭算起,.{2} 是任意兩個字,[市縣] 是「市」或「縣」其中一個。B2:B7 的結果:
| 列 | 地址 | 結果 |
|---|---|---|
| 2 | 台北市大安區和平東路二段106號 | 台北市 |
| 3 | 新北市板橋區文化路一段188號 | 新北市 |
| 4 | 新竹縣竹北市光明六路10號 | 新竹縣 |
| 5 | 臺南市東區府東路20號 | 臺南市 |
| 6 | 寄到公司就好,板橋文化路那邊 | #N/A |
| 7 | 高雄市前鎮區中山二路5號 | 高雄市 |
兩個地方要處理。第 5 列寫的是「臺」,其他列是「台」,統計的時候會被當成不同的字,用 SUBSTITUTE 統一。第 6 列根本沒有縣市,REGEXEXTRACT 找不到就回 #N/A,用 IFERROR 接住,顯示「未填」:
取出縣市,統一台字,找不到顯示未填
=IFERROR(SUBSTITUTE(REGEXEXTRACT(A2, "^.{2}[市縣]"), "臺", "台"), "未填")C2:C7 會得到:
| 列 | 結果 |
|---|---|
| 2 | 台北市 |
| 3 | 新北市 |
| 4 | 新竹縣 |
| 5 | 台南市 |
| 6 | 未填 |
| 7 | 高雄市 |
那 AI 函式呢
第 6 列這種「板橋文化路那邊」,AI 可能判斷得出是新北市,這是它比 REGEXEXTRACT 多出來的本事。但它也可能猜錯,或每次猜的不一樣。如果要用,我會把提示寫成:
只在地址能判斷時回答縣市
=AI(
"從這個地址取出縣市,只回答縣市名稱,例如「台北市」。如果地址裡看不出縣市,就回答「未填」。",
A2
)而且只拿它處理 REGEXEXTRACT 回 #N/A 的那幾列,其餘列不需要花這個力氣。順序是先讓確定性的函式跑完大部分,剩下的少數再交給 AI 或人工看。
什麼時候用哪一個
- 有固定格式、找得到規律(縣市、電話、訂單編號、關鍵字):
REGEXEXTRACT、REGEXMATCH、IFS。結果每次一樣,改資料會立刻重算。 - 需要「讀懂」意思(摘要、情緒、規則講不清楚的分類):
AI函式。輸出要當成參考,並用固定選項限制它。 - 後面還要計算、統計、當條件判斷的欄位:用確定性函式,或把
AI的輸出再轉成標準格式。AI輸出的限制在 陷阱篇 會細講。
地址取縣市,找不到顯示未填
A2 是「台北市大安區和平東路二段106號」,A3 是「寄到公司就好,板橋文化路那邊」,A4 是「臺南市東區府東路20號」。在 B2 寫一條公式取出縣市,找不到縣市時顯示「未填」,不需要統一臺和台,往下填到 B4 後會得到「台北市」「未填」「臺南市」。
我個人的做法是:只要能用 REGEXEXTRACT 寫出來的,就不讓 AI 碰。留給 AI 的,是那些我寫不出規則的判斷。
接下來可以
相關文章
查看所有文章AI 函式的限制與陷阱:結果會變、輸出是文字、資料送去哪
整理 Google 試算表 AI 函式容易踩到的地方:同樣提示結果不一定相同、斜線底紋與重新生成、帶單位的輸出是文字要再用 VALUE 轉成數字、不適合做計算與關鍵判斷、資料隱私、與 Gemini 側邊欄的分工,以及一次生成的格數與配額限制。
電話、地址、單號、Email:四種混亂文字的 REGEX 實戰整理
拿一份客服回饋的混亂文字,用 REGEXEXTRACT、REGEXMATCH、REGEXREPLACE 擷取台灣手機與市話、拆出縣市與行政區、抓訂單單號、取出 Email 網域,最後用 ARRAYFORMULA 處理整欄。
留言討論
共 0 則留言
