有網友問到,在 Excel 中取得一個資料表(如下圖左),如果想要在一個儲存格中選取某一個類別,即能篩選出所有該類別的資料(如下圖右)。
你可以試著使用「自動篩選」即可方便篩選出想要類別的資料,但是如果想要以公式形式呈現,方便改變類別後,即能馬上得到結果,該如何處理?
【準備工作】
本例需要使用陣列公式,為了方便說明,先定義各個資料名稱。
1. 選取儲存格A1:D21,按一下 Ctrl+Shift+F3 鍵,勾選「頂端列」選項。定義名稱:「項目、類別、編號、數量」
2. 選取儲存格A1:D21,由[公式/已定義名稱/名稱管理員]中定義名稱為:「資料」。
3. 選取儲存格F2,在[資料/資料工具/資料驗證]中設定儲存格內允許:清單,來源:「A,B,C,D,E」。
【輸入公式】
儲存格G2:{=IFERROR(INDEX(資料,SMALL(IF(類別=$F$2,項目,FALSE),ROW(1:1))+1,3),"")}
這是陣列公式,輸入完成請按 Ctrl+Shift+Enter 鍵。
儲存格H2:{=IFERROR(INDEX(資料,SMALL(IF(類別=$F$2,項目,FALSE),ROW(1:1))+1,4),"")}
這是陣列公式,輸入完成請按 Ctrl+Shift+Enter 鍵。
複儲存格G2:H2,往下各列貼上即可。
【公式說明】
以儲存格G2為例。
儲存格G2:{=IFERROR(INDEX(資料,SMALL(IF(類別=$F$2,項目,FALSE),ROW(1:1))+1,3),"")}
IF(類別=$F$2,項目,FALSE)
將「類別」中符合儲存格F2內容者對應「項目」,否則給予Fasle。以本例可得 { Fasle, Fasle, 2, 3, Fasle, Fasle, 7, … } 陣列。
SMALL(IF(類別=$F$2,項目,FALSE),ROW(1:1))
取得前述陣列中的第1個、第2個、…最小值,本例為 2,3,7, … 。
INDEX(資料,SMALL(IF(類別=$F$2,項目,FALSE),ROW(1:1))+1,3)
前一項所得的各個最小值,以 INDEX 函數在「資料」陣列中求得第3欄的資料。公式中的「+1」乃因為「資料」中的欄名也占掉一列。
IFERROR(INDEX(資料,SMALL(IF(類別=$F$2,項目,FALSE),ROW(1:1))+1,3),"")
利用 IFERROR 函數將 INDEX 查表後所產生的錯誤值以空白顯示。
儲存格H2的公式原理相同,只要將查表 INDEX 函式中設定為查詢第4欄即可。
【延伸閱讀-FILTER函數篩選應用】
Excel-下拉式清單選取月份列出該月日期
Excel-2021版新增函數進行篩選、查詢、排序之綜合練習

我完全按照上述方式執行 可是出現#name? 不知道那邊出問題 我是使用 office 2003 請問您我該如何修正? 謝謝!!
您好: 請教一個問題 若是上述D欄的左邊,多一欄位E欄"停用狀態" (無論a、b、c類別,皆多了''停用''與''不停用''兩種狀態) 若是我要把類別C當中的''非停用''資料抓取出來,該如何處理呢? 謝謝!
請參考範例說明:http://isvincent.pixnet.net/blog/post/43190668
http://isvincent.pixnet.net/blog/post/36030199-excel-%E7%94%A8%E5%85%AC%E5%BC%8F%E7%AF%A9%E9%81%B8%E8%B3%87%E6%96%99(%E9%99%A3%E5%88%97%E5%85%AC%E5%BC%8F) 老師您好,我用您的上面連結作初我要的結果了,謝謝喔
老師你好:我在G2輸入 {=IFERROR(INDEX(資料,SMALL(IF(類別=$F$2,項目,FALSE),ROW(1:1))+1,3),"")}、在H2輸入 {=IFERROR(INDEX(資料,SMALL(IF(類別=$F$2,項目,FALSE),ROW(1:1))+1,4),"")},輸入完時都有按Ctrll+Shift+Enter,但都無法顯示查詢結果,只是顯示原公式,請問要怎麼辦? 謝謝老師
陣列公式結果的{ }是在按了 Ctrl+Shift+Enter 鍵後自動產生的,所以不用輸入{ }。
老師你好: 我和#4 靖慶 一樣都是輸入完, Ctrll+Shift+Enter,但都無法顯示查詢結果,只是顯示原公式, 請問怎處理
陣列公式結果的{ }是在按了 Ctrl+Shift+Enter 鍵後自動產生的,所以不用輸入{ }。
老師..請教一下...若想將F~H的結果跨工作表顯示的話..函數又該如何寫呢?
老師您好, 想請問我依照您的方式輸入以後, 呈現的結果是不連續的, 要如何才能將篩選結果已連續的方式呈現呢?
老師您好, 想請問 這公式 GOOGLE試算表能用嗎
老師您好,我的資料跑得出來,但是會跳著顯示耶,請問這該怎麼處裡呢? 例如: 項目1,符合條件,出現在第一列。 項目2,不符合條件,在第二列呈空白。 項目3,符合條件,出現在第三列。 這樣變成我篩選的工作表必須建立與資料範圍同樣龐大的列數。
呈現的結果是不連續的,會跳著顯示 表示不是陣列公式 在G2儲存格中輸入 =IFERROR(INDEX(資料,SMALL(IF(類別=$F$2,項目,FALSE),ROW(1:1))+1,3),"")後不要直接按enter 要直接按ctrl+shift+enter 再往下拉
謝謝你幫忙回覆。
如果我希望同時符合2個條件(比如符合A或B),公式要如何改?