在 Excel 365、2021 版本中,FILTER 函數讓篩選資料變得簡單又直覺,但如果你的 Excel 沒有 FILTER 函數(如 Excel 2019 或更舊版本),該怎麼辦?其實,還有 3 種實用篩選方法(內建篩選、公式、VBA),同樣能幫你有效整理資料!
無論你是 Excel 新手 還是 進階使用者,這篇文章都能幫你找到合適的篩選解決方案!
- 內建篩選(進階篩選):適合不想寫公式的使用者
- 函數公式篩選:用 INDEX、SMALL 等函數模擬 FILTER
- VBA 自動篩選:適合需要自動化的進階使用者
第一種:手動進階篩選(適合快速篩選)
Excel 內建「進階篩選」功能,適合偶爾篩選資料,不需要寫公式。
如何使用進階篩選?
按艾倫的範例,滑鼠先選擇資料範圍(如 A1:C9)
圈選好 Excel資料範圍後,從「資料 -> 進階」。
選擇 篩選結果顯示於原位置 或 複製到其他位置。
進階篩選設定完成後,回到表格中會看到新增的下拉式功能,打開夏令營的下拉式功能,取消「空格」的勾選。
篩選完成後,有參加夏令營的學生就會被篩選出來。
同時將夏令營、冬令營的下拉式功能,取消「空格」的勾選後,
這時候同時有參加夏令營和冬令營的學生就會被篩選出來。
使用函數公式篩選(適合動態篩選)
支援 FILTER 函數的版本:Excel 365、Excel 2021,但艾倫 Excel版本是 2019 沒辦法使用 FILTER,Excel 2019、Excel 2016、Excel 2013 及更早版本都不支援 FILTER,接下來教學中艾倫會分享使用 INDEX + MATCH 或 IF 來替代 FILTER函數來篩選資料。
單一條件篩選公式設定:
篩選「只有參加夏令營」、「只有參加冬令營」函數公式:可直接複製,需手動修改你們要篩選資料的範圍。
=IFERROR(INDEX(A$2:A$9, SMALL(IF(B$2:B$9="是", ROW(A$2:A$9)-ROW(A$2)+1), ROW(1:1))), "")
公式解釋:
- IF(B$2:B$9=”是”, ROW(A$2:A$9-ROW(A$2)+1) 找出符合條件的範圍。
- SMALL(…, ROW(1:1)) 依序取出符合條件的數據。
- INDEX(A$2:A$9, …) 取得對應學生的姓名。
- IFERROR(…, “”) 避免錯誤顯示。
輸入好公式,這時候不要直接按 ENTER,而是按「Ctrl + Shift + Enter」,這時會出現第一個符合條件的學生名字。
再來複製第一格的公式,滑鼠圈選下方空格。
貼上公式後,接著會顯示所有符合條件的學生名稱。
資料動態篩選展示:
本來資料顯示小敏有參加夏令營,但我們取消小敏參加夏令營的紀錄,本來篩選結果有小敏,我們取消的同時,篩選結果也會同步變動,小敏就消失在篩選結果名單中。
兩個以上條件篩選公式設定:
篩選「有參加夏令營和冬令營」的函數公式:可直接複製,需手動修改你們要篩選資料的範圍。
=IFERROR(INDEX(A$2:A$9, SMALL(IF((B$2:B$9="是")*(C$2:C$9="是"), ROW(A$2:A$9)-ROW(A$2)+1), ROW(1:1))), "")
公式解釋:
- (B$2:B$6=”是”)*(C$2:C$6=”是”) 這部分會檢查 「夏令營 = 是」且「冬令營 = 是」 的條件。 乘法運算 * 讓條件同時成立(因為 TRUE * TRUE = 1,其他情況為 0)。
- IF(…, ROW(A$2:A$9)-ROW(A$2)+1) 找出符合條件的學生在資料範圍內的相對位置。
- SMALL(…, ROW(1:1)) 取得符合條件的學生資料,並依序顯示。
- INDEX(A$2:A$9, …) 取得對應學生姓名。
- IFERROR(…, “”) 避免錯誤值,如果沒有符合條件的學生則顯示空白。
輸入時要記得按 Ctrl + Shift + Enter,這樣就能找出同時有參加夏令營、也有參加冬令營的學生了。
使用 VBA 自動篩選(適合大量數據)
如果經常需要篩選資料,VBA 會是更高效的方法,首先打開 VBA 編輯器(按 Alt + F11)。
插入新模組(「插入」→「模組」)。
單一條件 VBA代碼:
將 VBA代碼複製貼上,這是單純篩選有參加夏令營學生的 VBA代碼。
Sub 篩選夏令營學生()
Dim ws As Worksheet
Set ws = ActiveSheet
' 確保有篩選功能
If ws.AutoFilterMode Then ws.AutoFilterMode = False
' 設定篩選範圍(A1:C100)
ws.Range("A1:C100").AutoFilter Field:=2, Criteria1:="是"
End Sub
複製好代碼就貼在 VBA編輯器中。
這樣就能快速篩選出有參加夏令營的學生了。
兩個以上條件 VBA代碼:
將 VBA代碼複製貼上,這是篩選有參加夏令營+冬令營學生的 VBA代碼。
Sub 篩選夏冬令營學生()
Dim ws As Worksheet
Set ws = ActiveSheet
' 確保已有篩選
If ws.AutoFilterMode Then ws.AutoFilterMode = False
' 設定篩選範圍(假設資料在 A1:C100)
ws.Range("A1:C100").AutoFilter
' 篩選條件:夏令營 = "是" 且 冬令營 = "是"
ws.Range("A1:C100").AutoFilter Field:=2, Criteria1:="是"
ws.Range("A1:C100").AutoFilter Field:=3, Criteria1:="是"
End Sub
複製好代碼就貼在 VBA編輯器中,這樣一來就能快速找出有參加夏令營和冬令營的學生名單。
在 Excel 2019 及更舊的版本中,雖然 FILTER 函數無法使用,但我們仍然可以透過其他方法達到相同的篩選效果。內建篩選功能適合一般使用者,操作簡單,而透過 INDEX、SMALL 等函數建立篩選公式,則能讓篩選結果自動更新,適合需要動態篩選的情境。如果想進一步提升效率,VBA 自動篩選則提供了更靈活的方式,可以根據不同條件快速篩選資料,適合需要處理大量數據或重複操作的使用者。
無論是使用內建篩選、函數公式,還是 VBA,每種方法都有其適用場景與優勢,選擇適合自己的篩選方式,能讓 Excel 的資料處理更加高效。希望這篇文章能幫助你找到適合的解決方案,讓你在沒有 FILTER 函數的環境下,也能輕鬆管理和篩選資料。