【Excel FILTER 函數完整教學】入門到進階實戰:用最少步驟篩選全搞定(廣東話)

Author:

想喺一大堆Excel資料入面「即刻」篩出你要嘅名單?呢篇文章將由最入門嘅FILTER操作,逐步教到進階實戰:自動處理多條件(例如年齡30至50+指定地區)、用VSTACK清晰重組表頭、再進一步用CHOOSECOLS只顯示你需要嘅欄位。你唔使再逐格揀Filter選項,亦唔會因為輸入唔完整就找唔到資料,效率直接拉滿。

文章目錄

用 Excel 篩選函數從最簡單 Filter 入手快速找出目標資料 立即提升報表效率

當你在一大堆 excel 資料裡要「快速找目標」,最先想到的其實是 Home 分頁的 一般篩選(Filter):點第一列的三角形,選「全灣」就立刻只剩下符合的客人。不過只要你的條件一變多(例如要找 30 至 50 歲),你就得逐個逐個揀年齡,反而拖慢報表速度。要提升效率,關鍵就是把篩選變成「可計算、可更新」的結果–用 Excel FILTER 函數,從最簡單版一路做出你要的精準查詢。

先用最直覺的版本:假設你的資料在 Column A 到 F,想找出「荃灣」所有客人,做法是用 FILTER 函數去定義三件事:Array(要從哪一段資料篩)、Include(符合條件的判斷式)、If Empty(找不到時顯示什麼)。例如把 district = J1 當條件:當你輸入 J1 是「shatin」就會回傳荃灣/沙田對應的名單;若完全找不到,公式會自動顯示你設定的文字(例如 Not Found)。這種做法的優點是:條件改了(J1 換成「沙田」、「東區」),輸出的結果會立即動態更新

但真正在工作上更常見的,是你輸入不一定是「完全相符」。例如你已經用公式寫死區域開頭要完全等於「shatin」,結果你在 J1 打的是「shatin填字TIN」或只想找包含字詞,這時候一般的 等於(=) 就會顯示找不到。解法就是把 include 的判斷由 等於 換成「搜尋是否包含」:在條件中加入 ISNUMBER(SEARCH(…)),把「在某個欄位裡,有沒有出現你輸入的字」轉成 TRUE/FALSE,這樣你就可以只打「city」就找到 九龍城 相關資料;同時也要留意:若 district 內有字重疊(例如找「荃灣」卻包含到「灣」),可能會把相近字一起拉出來,這是條件邏輯要再精準化的提醒。

想把報表做得更像你平常的「客製輸出」,下一步就把篩選結果的呈現也一起控制:先用 VSTACK 把你原本缺失/混在一起的欄位頭(header)補回來,令輸出結果可讀性更高(例如把 A1 到 F1 的欄名一起堆疊出來:firstname、membership number、membership level、district、age)。再進一步,如果你只想顯示部分欄位,不要全表都攤開,就在 FILTER 前加入 CHOOSECOLS:用「第幾欄」來挑選要顯示的欄位(例如你只要 membership number、first name、last name,就選對應編號,例如 3、1、2;如果要再加 h 欄,直接再補上該欄位編號即可)。

你想達成的目標 實際用到的 FILTER 結構 常見工作情境
只用單一條件快速篩 Array + Include(district=J1) + If Empty 一鍵找「全灣區」客人
多條件(例如 30-50 歲) 多個 Include 條件相乘(>=30、<=50、district=J1) 先縮小年齡區間,再篩地區
輸入是「部分字」也要命中 ISNUMBER(SEARCH(J1, 區域欄位)) 打「shatin」/「city」就能找包含內容
輸出只顯示部分欄位 CHOOSECOLS(…) + 再做 VSTACK 顯示 header 報表只要 membership number、姓名,不要整張表

掌握 FILTER 的三個核心參數 Array Include If Empty 實現動態篩選與自動容錯回應

要把 FILTER 用到「又動態又可容錯」,你要先記住它其實由三個核心參數組成:ArrayIncludeIf Empty。當你明白這三個位置分別負責「資料來源 / 篩選條件 / 找不到時怎樣回應」,公式就會變得可讀、可擴充,而且一改條件就即刻更新結果。

  • Array:你要從哪一整塊範圍去找資料(例如原本選了 Column A 到 Column F)。
  • Include:你要用什麼條件過濾(例如 district = 荃灣,或再加 age 範圍)。
  • If Empty:當結果是空的時,Excel 要回什麼字(例如傳回 “Not Found”,避免你看到一個「毫無反應」的空白格)。

以「找出荃灣所有客戶」做示範:把你想找的資料範圍放在 Array(A到F),然後在 Include 裡設定條件,例如 district 是否等於 J1(J1 你可以輸入荃灣/沙田/全灣等)。最後在 If Empty 放入 “Not Found”,這樣當沒有符合資料時,Excel 會明確回應,而不是讓你以為公式失效。

要進一步做「動態條件」就把 Include 擴展成 多個 End conditions:例如同時篩選 荃灣age 介乎 30 至 50。你可以把條件拆成三段,用乘號(*)把條件「同時成立」串起來:district = J1age >= J2age <= J3。範例結果會只留下符合者(例如影片中的 Fiona LeeMarcus Choi),而且當你把 J1 改成東區/沙田,輸出會立刻跟著更新。

另外,真正在工作上最常見的問題是「你輸入的字不是完全相符」。就像你想找沙田,但你只打 shatin,若表格裡 district 寫的是中文「沙田」,用完全相等就會直接找不到。解法是把 district = J1 改成「包含文字」判斷:用 isNumber 搭配 search,用「J1 的字是否出現在 district 的任何位置」來決定真/假。要注意去程式化輸入所帶來的副作用:若 district 裡有重複或包含字(例如你找「荃灣」的「灣」時),可能會連帶把包含該字的其他區也一起列出。

如果你覺得結果太雜、只想顯示部分欄位(例如只要 membership numberfirst namelast name),做法是對 FILTER 的輸出加上欄位控制。常用兩招:VSTACK 先把你指定的表頭(A1到F1)一起堆疊到結果上,令輸出不再混亂;再用 CHOOSECOLS 控制只回傳你指定的欄位。這樣你的 dynamic filter 不只「篩得到」,還能「報表一出即用」。

進階條件組合 用多重條件同時限制地區與年齡範圍 並提供找不到時的清晰處理建議

要同時限制「地區」同「年齡範圍」,最直觀做法係用 FILTER(陣列, Include, 如果空值):把地區條件先對齊到例如 J1(district = 荃灣),再加年齡條件例如 H(age)≥ J2H(age)≤ J3。關鍵係把多個條件用「乘(*)」綁起來–乘係代表「同時成立」,所以最終會只剩下符合「荃灣 + 30至50歲」嗰班客戶(例如直播例子中最後只剩 Fiona LeeMarcus Choi)。

示範邏輯(以你表中區域欄位為 District、年齡欄位為 Age):

  • 地區條件: District 列 = J1
  • 下限年齡: Age 列 >= J2(例如 30)
  • 上限年齡: Age 列 <= J3(例如 50)
  • 多條件同時成立:條件1 * 條件2 * 條件3

另外一個進階位係「找不到時要點樣處理」。Addy 係用 If Empty 直接回覆清晰訊息,例如 “Not Found”(如果你設定嗰個組合冇任何符合資料,就唔會畀一堆錯誤或空白嚇到你)。更貼合實務嘅做法係:一旦沒有結果,就提示用戶檢查輸入,例如地區拼法或年齡是否太窄;因為一格輸入唔岩,就會全部「lock」到冇輸出。

若你想輸出表頭並保持結果好睇,Live 例子建議喺 FILTER 前面加 VSTACK:先把你想顯示嘅標題(例如 A1:F1:firstname、lastname、membership number、membership level、district、age)VSTACK 出嚟,咁你篩出嘅動態陣列就會包含 header,唔會變成「冇欄名好混亂」;而如果你仲想縮到只顯示指定欄位,例如只留 membership number / first name / last name,則可在 FILTER 外層再包 CHOOSECOLS 去自定義返回欄。補充:Addy 亦提到地區字串未必會「完全相符」,例如輸入 shatin 但資料係 沙田,可用 ISNUMBER(SEARCH(查找字, 地區欄範圍)) 做「包含式」匹配;注意缺點係如果有重覆片段(例如只找「灣」可能會同時夾到「灣仔」),就要留意用詞是否過闊。

場景 你要用嘅技巧 找不到時
同時限制地區 + 年齡 FILTER + (District=J1) * (Age>=J2) * (Age<=J3) If Empty 顯示 “Not Found”
結果要有表頭 VSTACK(A1:F1, FILTER(…)) 同樣放入 If Empty,避免空白
唔想顯示全部欄位 CHOOSECOLS 只篩你要嘅列 若冇結果,If Empty 仍可保留訊息

用 VSTACK 自動重組表頭與欄位結構 讓篩選結果自動變得易讀易用

VSTACK 去「自動重組表頭與欄位」的目的很簡單:當你用 FILTER 得到動態結果後,輸出區如果冇埋表頭,睇嘅時候就會好易混亂。Addy 示範過一個實戰做法:喺公式嘅 FILTER 前面先用 VSTACK 把你原本嘅表頭「貼」上去,令篩選出嚟嘅清單由第一行開始就係正確欄位名稱,之後不論你揀 荃灣沙田,或者更換其他條件,結果都會自動保持清晰可讀。

實際寫法思路係:VSTACK(表頭範圍, FILTER(…))。例如你有原本表頭係 A1:F1,你就先把 A1:F1 當作第一塊,再接上 FILTER 產生嘅內容。咁樣你出來嘅表會自動包含:firstnamemembership numbermembership leveldistrictage 等欄位標籤。Addy 提醒,若果你忽略呢一步,篩選結果頁面就會好似少咗第一行一樣,後面再配合報表、截圖、或交收畀同事時會特別麻煩。

跟住就係「篩選易用」嘅關鍵:表頭可視化 + 條件彈性。Addy 用咗一個真實卡位例子:當在 J1 入入 shatin 能夠搵到資料,但若你用輸入文字時只係「一個字」或出現不完全相符,就會搵唔到。佢嘅解法係喺公式中把嚴格相等條件,改成用 SEARCH 配合 ISNUMBER 去判斷「存在於字串任何位置」。重點係:即使你啲條件輸入更彈性,因為 VSTACK 已經幫你把表頭重組好,所以你每次篩得到嘅結果都仍然易讀易用。

  • VSTACK 作用:把 表頭(A1:F1) 跟 FILTER 結果合併,避免「篩選輸出冇 header」造成混亂。
  • 條件彈性配套:用 ISNUMBER + SEARCH 取代嚴格等於,令輸入「部分文字」亦可篩到匹配資料。
  • 進階欄位精簡:再配合 CHOOSECOLS 只展示你需要嘅欄位(例如只留 membership numberfirst namelast name),令輸出更貼近報表用途。

如果你同時想結合「自動表頭 + 只顯示指定欄位」,Addy 亦提過一個好用策略:先用 VSTACK 裝上表頭,再用 CHOOSECOLS 控制篩選結果只顯示你要嘅欄位順序(例如把 membership number 放第一、first namelast name 接住)。咁做出來嘅輸出唔止易讀,仲可以直接當作可重複使用嘅「動態報表模板」,每次改條件都自動更新,而且格式一致。

以下係你可以直接帶走嘅輸出效果邏輯(概念示意):

表頭(由 VSTACK 自動貼上) FILTER 自動生成的資料行
firstname, membership number, membership level, district, age 符合條件(例如 district 含部分字 + age 範圍)的名單

總結就係:你唔單止「篩到資料」,而係用 VSTACK 先把 表頭與欄位結構整理好,令篩選結果由一開始就變成同報表一樣可讀、可用、可交付。

VSTACK 功能概念(ExcelJet:把陣列垂直堆疊)

解決關鍵字不完全相符問題 用 ISNUMBER 與 SEARCH 做部分匹配並提醒重複字串造成的誤差

FILTER 做資料篩選時,如果你的條件輸入(例如:荃灣shatin)跟資料欄位(district)只有「部分字」相符,就很容易出現「解不出結果」或「結果不準」的情況。解法係將「完全相符」改成「部分匹配」,做法就係在公式入面用 ISNUMBER + SEARCHSEARCH負責搵字串位置、ISNUMBER負責把「有無搵到」轉成 TRUE/FALSE,咁 FILTER 先至會跟住條件去列出該行。

以你原本用「E 到 J1 之間必需完全相等」嗰段為例(你講過:輸「shatin」可能點解揾唔到資料,因為資料不一定由開頭就係 shatin),要做部分匹配,你可以把條件改成下面概念:在公式裡,把「district 等於 J1」改為「EE:E(district 欄)裡搵得到 J1 就算符合」。實作時核心邏輯係:

  • SEARCH( J1, EE:E ):當 J1 出現在 district 任意位置,就會回傳位置(數字);找唔到會報錯。
  • ISNUMBER( SEARCH(…) ):有回傳位置(數字)= TRUE,代表符合條件;找唔到 = FALSE。
  • 結果效果:你輸入「abc」唔需要完全等於整個 district,只要係佢入面出現過就會篩到。

但要提醒:部分匹配會帶來重複字串誤差。例如你想揾 荃灣,實際 search 係「搵到任何包含『灣』或包含子字」都會列出;所以當 district 內同時存在「灣」出現而又連到其它地名(例如你講過:會連「灣仔」嗰類)就必然會被一起揀出嚟。換句話講,部分匹配係好強,但你要留意資料欄位如果存在常見字(例如「灣」「城」「村」等),FILTER 就會比你想像範圍更闊。

你輸入 J1 SEARCH/ISNUMBER 的判斷 可能出現的結果
shatin district 任意位置出現 shatin 就 TRUE 可篩到原本因「唔完全相符」而被漏掉的沙田資料
荃灣 district 含有「灣」相關子字串就可能 TRUE 可能同時揀到「灣仔」等含同字的地名(誤差來源)

要減少呢個誤差,你可以考慮兩個方向:一係確保資料 district 係「字串格式更可控」(例如用一致分隔符),二係如果你只想限定為「整個詞」而唔係任意包含,就要改篩選條件策略(例如把關鍵字拆分後再判斷、或改用更嚴格的比對方法)。總之:ISNUMBER + SEARCH係解決「關鍵字不完全相符」嘅最快捷方案,但就必須預先接受並留意「重複字串」導致的範圍擴大問題。

只顯示你需要的欄位 用 CHOOSECOLUMNS 精準定制輸出內容 讓分析焦點更集中

當你已經用 FILTER 把「符合條件」的會員/客戶篩出來後,下一個關鍵往往是–你想不想把所有欄都一起拋出?Addy 在實戰中發現,資料量一大,只要輸出欄位不夠精準,閱讀和判斷就會立刻變慢:例如同一份表有 firstname、lastname、membership number、membership level、district、age,如果你只關心「某些欄位」做報表,卻把其他欄也一起顯示,畫面就會變得混亂,分析焦點自然散掉。

這時候就要用到 CHOOSECOLS:它的作用是「在 FILTER 之前或之後,直接指定你要顯示的列欄」。做法超直接–在公式前面加上 CHOOSECOLS( … ),然後用逗號列出你要的欄位編號。Addy 的例子非常貼近工作場景:她只想顯示 membership number、first name、last name,於是先確認原表欄位順序(例如第一欄是 first name、第二欄是 last name、第三欄是 membership number),再輸入對應的欄位數字;結果出來就會變成只包含你指定欄位的乾淨輸出,報表閱讀效率立刻提升。

目標輸出 你需要指定的欄位(以欄位位置編號) 備註
只看會員編號 + 名 + 姓 3,1,2(第三欄 membership number、第一欄 first name、第二欄 last name) 欄位順序可自行重排
再加上 district 在後面追加 第幾欄(例如新增第 6 欄 → …,6 想看什麼就加什麼
只看你做分析需要的欄位 只列出該報表的欄位編號集合 避免資訊雜訊

更進階的好處是:當你的 FILTER 條件本身已經很「動態」(例如 criteria 改成不同區域、再加上年龄條件 30 至 50),你依然可以用 CHOOSECOLS 把輸出維持在同一種格式,讓你後續做匯出、統計或延伸分析會更穩、更一致。要提醒的是,CHOOSECOLS 只負責「挑欄」:條件(例如 district = 某區、age 大於等於 30 且小於等於 50)仍由 FILTER 的條件邏輯決定;兩個功能分工明確,才是真正省時間的關鍵。

  • FILTER:決定「哪些資料列出來」
  • CHOOSECOLS:決定「哪些欄位要顯示」
  • 輸出只留重點 → 報表更清晰、分析更快

如果你想把整份結果從「能用」提升到「好讀、好分析」,就用 CHOOSECOLS 把欄位精準定制:先把步驟篩出正確列,再把欄位收窄成你真正需要的那幾欄。這樣你的工作時間會少花在拖拉與掃視上,把精力放回判斷本身,報表效果也會明顯更專業。

CHOOSECOLS 函數介紹(Exceljet)

常見問答

🔎 Excel FILTER 函數可以一次篩出多個條件嗎?

可以,用 FILTER 把「多個條件」寫進公式就能同時篩選。你可以先固定要搜尋的資料範圍(例如選取 Column A 到 Column F),再用條件去限制結果,例如同時篩出「district = 荃灣」以及「age 介乎 30 至 50」。做法上會把條件寫成多個條件範圍相乘(如同時要求 H ≥ 30 且 H ≤ 50),最後用 FILTER 把符合的名單自動列出。這就比傳統逐個按年齡篩選更快、更動態。

🧠 為什麼輸入「沙田」找不到結果?怎樣做可支援部份字串?

因為你用的是「完全相符」邏輯,所以只輸入或包含關鍵字時可能會匹配不到。實務上如果你原本條件是用「district 等於 J1」,輸入「shatin」找不到時,代表資料並非完全同樣字型或內容。解法是把公式中的條件改成「搜尋包含」模式:可在 district 範圍加入 SEARCH,再配合 ISNUMBER 判斷是否找到關鍵字(把 J1 當成要尋找的文字來源)。這樣你即使輸入「shatin 之類的部分字」也能把相關 records 找出,而且還可以做更彈性的搜尋,例如你只輸入「city」也能拉出包含「九龍城」等相關資料。

🧩 篩選後表格太亂,能只顯示我想看的欄位嗎?

可以,你可以在 FILTER 前加入欄位重組,讓結果只顯示指定欄位並保留清晰標題。像你如果希望輸出「membership number、first name、last name」這三欄,不想把所有欄位都一起吐出來,就能用 CHOOSECOLS 來指定要顯示的列:先把你要的欄位用序號選出(例如先挑 membership number 放在第 1、再挑 first name 與 last name 的序)。同時也能先用 VSTACK 將表頭(如 A1 到 F1 的 header)一起疊到輸出結果前面,避免篩選出來第一行沒有 header 而造成混亂;如此一來你用輸入條件切換(如從 J1 改成其他 district)時,輸出會保持乾淨、可直接用於報表。

簡而言之

如果你也曾經在一大堆 Excel 資料裡,花時間一個個篩條件、又常常因為條件改動而重做,那你今天學到的 FILTER 就會是你最「省步驟、最有回報」的工具:不只是一鍵篩選,更能做到動態更新、同時處理多條件(例如地區+年齡範圍),還能把結果格式化得更清晰(用 VSTACK 統整標題、用 CHOOSECOLS 控制只顯示你要的欄位),再配合 SEARCH+ISNUMBER 解決「不完全相符」的查找問題,讓報表和資料分析真正走向自動化。

接下來就建議你直接把影片的公式套用到自己的工作檔案裡:
✅ 先用 FILTER 做第一層篩選(地區/條件)
✅ 再加上多重條件(用 ADN 的邏輯去包起來)
✅ 最後用 VSTACK、CHOOSECOLS 把輸出變成「你看得懂、你用得上」的報表

你想更快上手的話,現在就留言告訴我:你目前工作上最常需要篩選的條件是什麼(例如:部門+日期、產品+金額區間、客戶層級+地區),我可以再按你的情境給建議公式寫法。喜歡這種「由入門到進階、一步一步可直接用」的教學,也記得按讚、訂閱,並開啟小鈴鐺–下一集我會帶你把 FILTER 玩到更實戰、更貼近報表需求。