跳到主要內容跳到頁尾

FILTER 常見錯誤:#N/A、#REF! 與部分比對怎麼處理

7 分鐘閱讀Lv.3 中級摘要與日期

FILTER 出現 #N/A 時,是真的沒有資料還是範圍大小不一致?溢出被擋住的 #REF!、用 REGEXMATCH 或 SEARCH 做包含某個字的部分比對,以及資料變多時怎麼估計計算量。

發布 更新

文章目錄

為什麼我的 FILTER 明明有資料,卻回 #N/A?有時候公式沒壞,是真的沒有符合的列,有時候是公式寫歪了,而兩種情況在儲存格裡長得一模一樣。這篇整理 FILTER 最常踩的幾個坑,基本語法在 FILTER 入門 講過,這邊不重複。

後面都用同一張訂單,放在 A1:D13:

日期品項門市杯數
2026/10/01蘋果紅茶信義12
2026/10/01烏龍奶茶板橋37
2026/10/02蘋果綠茶信義8
2026/10/03蘋果紅茶板橋21
2026/10/04烏龍奶茶信義5
2026/10/05青茶板橋29
2026/10/06蘋果綠茶中和9
2026/10/07蘋果紅茶中和33
2026/10/08青茶信義17
2026/10/09烏龍奶茶板橋14
2026/10/10蘋果紅茶信義26
2026/10/10青茶中和11

同樣是 #N/A,意思卻不同

先看真的沒有資料。訂單裡沒有「新店」門市:

結果是 #N/A,把游標移上去,提示寫的是「系統計算 FILTER 時找不到相符項目」。這種是正常的,只是沒有符合的列。

Sheets 的 FILTER 沒有「沒資料時顯示」參數

Excel 的 FILTER 有一個選填的第三個參數,可以直接指定沒資料時顯示什麼。Google 試算表的 FILTER 沒有,第三個位置起放的都是條件。我們來看看如果照 Excel 的習慣,把文字放在第三個位置會怎樣:

板橋明明有訂單,結果卻是 #N/A。因為「沒有資料」被當成第二個條件,而它只有一格,長度和範圍的 12 列對不上。

反過來,Sheets 公式搬到 Excel 也要小心:Sheets 用逗號接的第二個條件,在 Excel 會被當成第三個參數 if_empty,結果就錯了。Excel 的 FILTER 只有一個 include 條件,多條件要用 *(且)與 +(或)組起來,寫法看 FILTER 實戰。另外 Excel 沒有符合的資料時,顯示的是 #CALC! 而不是 #N/A,而且只有 Excel 365、2024、2021 才有 FILTER。

用 IFNA 包起來

沒資料時要顯示文字,一般都是外面包 IFNA:

得到「沒有符合的訂單」。不過這個寫法有個副作用,IFNA 會把所有 #N/A 一視同仁,下一節的範圍大小不一致也會被它蓋掉,變成一句看起來很合理的「沒有符合的訂單」。

我個人的做法是:公式剛寫好的時候先不包,確認結果對了再加 IFNA。IFERROR 連 #REF!、#VALUE! 都會蓋掉,更容易把問題藏起來,除非真的想吞掉所有錯誤,否則我不用它。

想把「真的沒有資料」和「公式寫錯」分開,可以先用 COUNTIF 確認有沒有符合的列:

沒資料時顯示文字,條件範圍如果寫歪,FILTER 照樣報錯,不會被蓋掉。缺點是條件要寫兩遍,改的時候兩邊要一起改。

條件範圍大小不一致

我資料新增了一列,公式只拉了一邊,結果變成:

結果是 #N/A,提示是「FILTER 的範圍大小不符。應該有 12 列 1 欄,實際卻指定了 11 列 1 欄」。

這也是 #N/A,所以接著包 IFNA 的話:

就會顯示「沒有符合的訂單」,但板橋其實有 4 筆。這就是上一節說的副作用,這種錯很難察覺,報表一直顯示沒資料,會讓人先懷疑是不是真的沒訂單,最後才發現是範圍少一列。

修法是讓範圍和每個條件的列數完全一樣,A2:D13 配 C2:C13。資料會持續新增的話,我會兩邊都寫到底,A2:D 配 C2:C,用法在 FILTER 實戰 有寫。

溢出被擋住變成 #REF!

在 F6 輸入板橋的篩選公式:

結果有 4 列 4 欄,會佔 F6:I9。如果 G8 剛好有一格內容,比如有人隨手打的備註「擋住」,F6 就變成 #REF!。提示寫的是「系統未展開陣列結果,以免覆蓋 G8 中的資料。」

修法是把擋路的格子清掉,或把公式搬到空的地方,清掉以後 F6:I9 會自己展開成:

FGHI
62026/10/01烏龍奶茶板橋37
72026/10/03蘋果紅茶板橋21
82026/10/05青茶板橋29
92026/10/09烏龍奶茶板橋14

這個坑最煩的是它會「今天才出現」。昨天結果只有 2 列,沒碰到下面的格子,今天資料多了、結果變長,撞到下面的東西才報錯。有些擋路的東西肉眼看不到,像是只有一個空格的儲存格,或是合併儲存格的一部分。我習慣把 FILTER 放在工作表最上方,下面整塊留空,其他東西擺在左邊或右邊。

部分比對:包含某個字

我想找品項裡有「蘋果」的訂單。用等號是行不通的,等號要整格一模一樣:

沒有哪格剛好等於「蘋果」,結果是 #N/A。

REGEXMATCH

REGEXMATCH 判斷文字有沒有符合某個規則,有就是 TRUE,放進條件的位置剛好。規則寫「蘋果」,就是只要包含這兩個字:

Google 試算表公式
fx

品項包含蘋果

=FILTER(A2:D13, REGEXMATCH(B2:B13, "蘋果"))

來看看結果,6 筆:

日期品項門市杯數
2026/10/01蘋果紅茶信義12
2026/10/02蘋果綠茶信義8
2026/10/03蘋果紅茶板橋21
2026/10/06蘋果綠茶中和9
2026/10/07蘋果紅茶中和33
2026/10/10蘋果紅茶信義26

規則裡的直線 | 代表「或」,所以包含其中一個詞的寫法很短。找青茶或奶茶:

得到烏龍奶茶 3 筆、青茶 3 筆,共 6 列,順序和原始資料一樣。這比條件之間加 + 好讀,詞很多的時候更明顯。規則的更多寫法,看 正規表示式擷取文字。

不想碰正規表示式的話,SEARCH 找得到就回傳位置數字,找不到是 #VALUE!,所以前面加 ISNUMBER 變成 TRUE 和 FALSE。搜尋文字放在 G1,輸入「奶」:

Google 試算表公式
fx

品項包含 G1 的文字

=FILTER(A2:D13, ISNUMBER(SEARCH(G1, B2:B13)))

結果是 3 筆烏龍奶茶,也就是 10/01 板橋的 37 杯、10/04 信義的 5 杯、10/09 板橋的 14 杯。

搜尋框裡打到特殊符號

把搜尋框做成讓別人輸入的格子時,兩種寫法的差別會浮現。G1 輸入左括號 (:

左括號在正規表示式裡有特殊意思,單獨一個不是合法的規則,整條公式會出錯,而且顯示的不是 #REF! 或 #VALUE!,而是 #N/A,和查無資料時一模一樣,更難發現是規則寫壞了。換成 SEARCH,( 只是個普通字元,沒有品項含有它,FILTER 就回 #N/A。但 SEARCH 也有自己的特殊字元:? 代表任意一個字、* 代表任意多個字,要找真的問號或星號,前面要加波浪號 ~。

所以我的取捨是:自己寫死的規則用 REGEXMATCH,可以一次比對多個詞;讓別人輸入的搜尋框用 SEARCH,比較不容易被打錯字元弄壞。搜尋框留空時,SEARCH("", ...) 找到的位置都是 1,所有列都會留下,等於不篩。

資料變多會不會變慢

這邊不給秒數,只算比較的次數,這是可以算出來的。一條 FILTER 要把 1,000 列的條件各比一次,就是 1,000 次比較。

如果在每一列旁邊各放一條 ,比如 1,000 列,每列都各自掃一遍整張表,就是 1,000 × 1,000 = 1,000,000 次比較。比較次數是列數的平方,資料加倍,次數是四倍。

我會這樣處理:

  • 只要一個加總,用 SUMIFS,不必先 FILTER 再 SUM,見 SUMIFS 進階陷阱。
  • 想要一整排的各組小計,用一條 QUERY 分組一次算完,而不是每列各算一次。
  • SORT 包在 FILTER 外面,先篩再排,排序的列數少。

速度到底有多少差異,我建議複製一份自己的檔案,把公式換掉,再比較打開檔案或改資料後多久算完。整體的效能想法放在 效能基本觀念。

什麼時候不用 FILTER

只要一個數字或各組小計,上一節的 SUMIFS、QUERY、樞紐分析表比較合適。另外 FILTER 的結果是公式算出來的,改不了,要改請回原始資料。

練習

1

找出錯在哪

同事想看板橋門市、杯數至少 20 杯的訂單,寫了:

畫面顯示「沒有符合的訂單」,但板橋明明有訂單。請說明原因,並改成正確的公式,說明正確的結果有幾列。

下次看到 #N/A,先把外面的 IFNA 拿掉看提示怎麼說,再決定是資料真的沒有,還是範圍寫歪了。

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

分享:
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。