相關函數:INDEX() / SMALL() / ROW()
要從一大堆資料當中篩選出符合條件的資料,最簡單的方法就是〔資料〕〔篩選〕〔自動篩選〕,然後選擇你要的條件或公式。但是,這樣會有一些不方便的地方。
- 第一,進入篩選模式時,不方便輸入新的資料。
- 第二,即使使用的公式都一樣,進入篩選模式時,每次都要重覆輸入篩選公式。
- 第三,不能只篩選部份欄位,所有欄位都會全部顯示。
如上圖,要從學生的成績單中篩選出國文不及格的人的姓名和分數,可以在 F2 輸入陣列公式
=INDEX(B:B,SMALL(IF($C$2:$C$10<60,row($c$2:$c$10),""),ROW(C1)))
公式說明:
- IF(...): 設定篩選條件,如果 C 欄分數小於 60,就傳回列數,否則傳回空白,傳回值形成一個陣列。
- SMALL(IF(...),ROW(...)): 依序從陣列中傳回第一小,第二小...的列數。因為不符合條件者傳回空白,在這裡會傳回不合理的列數,導致結果為 0 或 #NUM!。
- INDEX(顯示資料欄位,SMALL(...)): 從 B 欄中依序篩選出列數所對應的值。
=INDEX(C:C,SMALL(IF($C$2:$C$10<60,row($c$2:$c$10),""),ROW(C1)))
再直接往下複製即可。這是一個陣列公式,記得用 CTRL+SHIFT+ENTER 來完成輸入。
這樣,我們可以任意在 A:D 欄輸入資料,F:G 欄會馬上自動顯示出最新的篩選結果,而且可以任意指定要顯示那些欄位。
如果想一次篩選多個條件,例如,想找國文,數學兩科都不及格的人,只要適當修改篩選條件就可以了。如 I2 輸入公式
=INDEX(A:A,SMALL(
IF((($C$2:$C$10<60)+($d$2:$d$10<60))=2,ROW($C$2:$C$10),""),
ROW(C1)))