網友問到:在 Excel 的資料清單中,如何用公式篩選符合條件者?
參考下圖左,是一個『日期、編號、評語』的清單,現在要根據一個『編號』值,篩選出符合該編號的資料內容(日期和評語),該如何處理?
【公式設計與解析】
選取儲存格B1:B26,按 Ctrl+Shift+F3 鍵,勾選「頂端列」,定義名稱:編號。
儲存格E3:
{=OFFSET($A$1,SMALL(IF(編號=$F$1,ROW(編號),999),ROW(1:1))-1,0)}
這是陣列公式,輸入完成要按 Ctrl+Shift+Enter 鍵,Excel 會自動產生「{}」。
複製儲存格E3,貼至儲存格E3:E14。
(1) IF(編號=$F$1,ROW(編號),999)
在陣列公式中判斷若是編號範圍的儲存格內容和儲存格F1相同者,傳回其列號陣列,若不是,則傳回「999」(這只是很大的一個數)。
(2) SMALL(IF(編號=$F$1,ROW(編號),999),ROW(1:1))
利用 SMALL 函數依序取出列號陣列中的第1, 2, 3, ... 較小值。當公式向下複製時,其中 ROW(1:1)=1→ROW(2:2)=2→ROW(3:3)=3→...。
(3) OFFSET($A$1,第(2)式-1,0)
將列號代入 OFFSET 函數,即可查詢到對應的儲存格內容。
同理,儲存格F3:
{=OFFSET($C$1,SMALL(IF(編號=$F$1,ROW(編號),999),ROW(1:1))-1,0)}
這是陣列公式,輸入完成要按 Ctrl+Shift+Enter 鍵,Excel 會自動產生「{}」。
複製儲存格F3,貼至儲存格F3:F14。
【延伸閱讀-FILTER函數篩選應用】
Excel-下拉式清單選取月份列出該月日期
Excel-2021版新增函數進行篩選、查詢、排序之綜合練習

請問如果同一列中有10個欄位,在篩選的過程中,符合條件的列中我只要列出某幾個欄位而不是整列印出,要如何做?謝謝教導。
謝謝Vincent老師,上面所提的問題經再次詳讀您的文章,已經解決了,謝謝您無私的教學。
謝謝你光臨我的教學部落格。
Vicent 老師, 請問在您的例子中,爲什麽F3儲存格的公式不是如下: 儲存格F3: {=OFFSET($C$1,SMALL(IF(編號=$F$1,ROW(編號),999),ROW(1:1))-1,0)} 謝謝回覆
幾年前key錯了,你是對的:{=OFFSET($C$1,SMALL(IF(編號=$F$1,ROW(編號),999),ROW(1:1))-1,0)}
Vicent 老師, 如果按照您的例子把公式複製到E3-E14, 則E12-E14會出現如以下情形,如何能在篩選的過程中,讓沒有資料的E3-E4只出現空白呢? 謝謝教導。 日期 編號 評語 編號 3 2016/09/01 2 bad 日期 評語 2016/09/02 2 bad 2016/09/06 good 2016/09/03 2 bad 2016/09/07 good 2016/09/05 1 good 2016/09/10 bad 2016/09/06 3 good 2016/09/11 bad 2016/09/07 3 good 2016/09/17 bad 2016/09/09 2 good 2016/09/18 good 2016/09/10 3 bad 2016/09/22 good 2016/09/11 3 bad 2016/09/29 good 2016/09/13 1 bad 2016/10/03 bad 2016/09/15 1 bad 1900/01/00 0 2016/09/16 2 bad 1900/01/00 0 2016/09/17 3 bad 1900/01/00 0 2016/09/18 3 good 2016/09/20 1 bad 2016/09/22 3 good 2016/09/23 2 bad 2016/09/25 1 good 2016/09/26 2 good 2016/09/27 2 good 2016/09/28 1 good 2016/09/29 3 good 2016/10/01 2 good 2016/10/03 3 bad 2016/10/05 1 bad
本文中的公式並不會出0(1900/01/00)的現象,請再檢查公式。
老師,不好意思,把您的名字打錯了--更正:Vincent
Vincent老師, 真謝謝您撥空回答我的問題。 根據您的回答,我再一次檢視我所鍵入的公式,在E12-E14欄位應該是空白, 卻仍然出現E12-E14 (1900/01/00 0)如下,煩請老師再幫我看看是哪裏出了錯,真是謝謝老師。 做法: 1. 將B1-B26設定為 頂端列 2. E3的公式設為: {=OFFSET($A$1, SMALL(IF(編號=$F$1, ROW(編號),999), ROW(1:1))-1,0)} 3. 將E3的公式複製到E4-E14 A B C E F 1 日期 編號 評語 編號 3 2 2016/09/01 2 bad 日期 評語 3 2016/09/02 2 bad 2016/09/06 good 4 2016/09/03 2 bad 2016/09/07 good 5 2016/09/05 1 good 2016/09/10 bad 6 2016/09/06 3 good 2016/09/11 bad 7 2016/09/07 3 good 2016/09/17 bad 8 2016/09/09 2 good 2016/09/18 good 9 2016/09/10 3 bad 2016/09/22 good 10 2016/09/11 3 bad 2016/09/29 good 11 2016/09/13 1 bad 2016/10/03 bad 12 2016/09/15 1 bad 1900/01/00 0 13 2016/09/16 2 bad 1900/01/00 0 14 2016/09/17 3 bad 1900/01/00 0 15 2016/09/18 3 good 16 2016/09/20 1 bad 17 2016/09/22 3 good 18 2016/09/23 2 bad 19 2016/09/25 1 good 20 2016/09/26 2 good 21 2016/09/27 2 good 22 2016/09/28 1 good 23 2016/09/29 3 good 24 2016/10/01 2 good 25 2016/10/03 3 bad 26 2016/10/05 1 bad
請將公式修正: {=IFERROR(OFFSET($A$1, SMALL(IF(編號=$F$1, ROW(編號),""), ROW(1:1))-1,0),"")}
Vincent老師, 成功了,太感激老師了,老師太棒了! 謝謝!
也謝謝你光臨我的教學部落格。
Vincent老師, 再請教您一個問題: 假設上例的C6評語欄是為空白欄,即沒有評語, F3用了: {=IFERROR(OFFSET($C$1,SMALL(IF(編號=$F$1,ROW(編號),""),ROW(1:1))-1,0),"")} 執行結果卻在F3出現0 而非原本的空白. 請問Vincent老師,這種情況該如何解決? 謝謝老師
公式改成: {=OFFSET($C$1,SMALL(IF(編號=$F$1,ROW(編號),""),ROW(1:1))-1,0)&""}
謝謝老師的解答,真的可以去掉0了,但因我的公式有下拉到一些預留的空白處,以便將來可以加增資料後自動帶出,但我如果用老師給我的公式再加上IFERROR 如下: {=IFERROR(OFFSET($C$1,SMALL(IF編號=$F$1,ROW(編號),""),ROW(1:1))-1,0)&"","")} 則0可以變更成空白,但原來有評語的地方卻也變成空白,請問老師我的公式是錯在哪一個地方? 很謝謝老師一直義不容辭,耐心花時間幫忙解答,真是感激不盡。
謝謝老師的解答,真的可以去掉0了,但因我的公式有下拉到一些預留的空白處,以便將來可以加增資料後自動帶出,但我如果用老師給我的公式再加上IFERROR 如下: {=IFERROR(OFFSET($C$1,SMALL(IF編號=$F$1,ROW(編號),""),ROW(1:1))-1,0)&"","")} 則0可以變更成空白,但原來有評語的地方卻也變成空白,請問老師我的公式是錯在哪一個地方? 很謝謝老師一直義不容辭,耐心花時間幫忙解答,真是感激不盡。
老師好~ 請問如果想要篩選唯一值要怎麼用公式做到呢? A1 B1 C1 拜訪日期 店家名稱 成交機率 1/12 A 50% 1/5 A 50% 1/10 B 30% 1/5 C 75% 請問要怎麼樣抓出機率大於等於50%的數據呢? 1/12 A 50% 1/10 B 30% 1/5 C 75% 麻煩老師了!! 謝謝您~
例如,原先公式中:編號=$F$1,修改公式:成交機率>=50%
老師好~ 但是如果單純修改為成交機率>=50% 兩個A都會抓到 有沒有辦法抓最新的資料呢? 1/12 A 50% (V) 1/5 A 50% (X) 麻煩老師了~ 謝謝~
請參考:https://isvincent.pixnet.net/blog/post/49331856