根據 Excel 資料表中(參考下左)的資料清單,想要篩選出合於類別並且和指定數量接近的資料,該如何處理?
本例要依兩個條件:類別、數量,來篩選資料。以指定數量-99~+99為接近值。
【公式設計與解析】
選取儲存格A1:E100,按 Ctrl+Shift+F3 鍵,勾選「頂端列」,定義名稱:項目、類別、編號、數量、狀態。
儲存格H2:{=IFERROR(OFFSET($A$1,SMALL(IF((類別=$G$2)*(數量<=$G$4+99)*
(數量>=$G$4-99),ROW(編號),""),ROW(1:1))-1,0),"")}
這是陣列公式,公式輸入完成要按 Ctrl+Shift+Enter 鍵,Excel 會自動加上「{}」。
複製儲存格H2,貼至儲存格H2:H15。
(1) IF((類別=$G$2)*(數量<=$G$4+99)*(數量>=$G$4-99),ROW(編號),"")
條件一:(類別=$G$2),
因為指定數量-100~+100為接近值,所以:
條件二:(數量<=$G$4+99)*(數量>=$G$4-99)
其中的「*」運算相當於執行邏輯 AND 運算。
在陣列公式中,當合於二個條件者,會傳回對應的儲存格列號,否則傳回空字串。
(2) SMALL(第(1)式,ROW(1:1))
利用 SMALL 函數根據第(1)式傳回的列號,由小至大取出列號。當公式向下複製時,ROW(1:1)=1→ROW(2:2)=2→ROW(3:3)=3→…。
(3) OFFSET($A$1,第(2)式-1,0)
將第(2)式取出的列號代入 OFFSET 函數,可以取得對應的儲存格內容。
(4) IFERROR(第(3)式,"")
當公式向下複製時,若傳回錯誤訊息,則以 IFERROR 函數轉換為空字串。
同理,
儲存格I2:{=IFERROR(OFFSET($C$1,SMALL(IF((類別=$G$2)*(數量<=$G$4+99)*
(數量>=$G$4-99),ROW(編號),""),ROW(1:1))-1,0),"")}
儲存格J2:{=IFERROR(OFFSET($D$1,SMALL(IF((類別=$G$2)*(數量<=$G$4+99)*
(數量>=$G$4-99),ROW(編號),""),ROW(1:1))-1,0),"")}
【延伸閱讀-FILTER函數篩選應用】
Excel-下拉式清單選取月份列出該月日期
Excel-2021版新增函數進行篩選、查詢、排序之綜合練習
Excel-列出非空白項目的清單(比較篩選函數和以陣列公式模擬篩選)

謝謝老師撥空回我的問題, 但我的程度實在太差只好再次跟您求救, 我寫不出想要的公式 想請您幫忙看看.. Sheet製單 A B C D E F G H I J K L 序 進銷單號 產品代號 對方品名/品名備註 數量 包裝/kg 完工日 備註二 製單 項次 單號 數量 J/K/L 1 1070622001 K7ZZ14GZ7095SSSZ1920 41 0706-2 05280529 從Sheet製程1篩選同"產品代號"又"包裝kg"最接近--回傳項次/單號/數量 2 1070622001 K7ZZ14GZ7095SSSZ1970 18.86 0706-2 05280529 3 1070622001 K7ZZ14GZ7095SSSZ2120 12.25 0706-2 05280529 4 1070622001 K7ZZ14GZ7095SSSZ2170 99.13 0706-2 05280529 5 1070622001 K7ZZ14GZ7095SSSZ1920 15 0706-2 05280529 6 1070622001 K7ZZ14GZ7095SSSZ1970 43 0706-2 05280529 7 1070622001 K7ZZ14GZ7095SSSZ2120 28 0706-2 05280529 8 1070622002 K7ZZ14GZ7095SSSZ2170 29.5 9 1070622002 K7ZZ14GZ7095SSSZ1920 155 10 1070622002 K7ZZ14GZ7095SSSZ1970 42.7 11 1070622002 K7ZZ14GZ7095SSSZ2120 42.85 12 1070622002 K7ZZ14GZ7095SSSZ2170 13.62 Sheet製程1 序 進銷單號 產品代號 對方品名/品名備註 數量 1 1070705007 K7ZZ14GZ7095SSSZ1920 15.98 2 1070705007 K7ZZ14GZ7095SSSZ1970 18.86 3 1070705007 K7ZZ14GZ7095SSSZ2120 12.25 4 1070705008 K7ZZ14GZ7095SSSZ2170 99.13 5 1070705009 K7ZZ14GZ7095SSSZ2220 51.22 6 1070705010 K7ZZ14GZ7095SSSZ1920 159.6 7 1070705011 K7ZZ14GZ7095SSSZ1970 44.61 8 1070705011 K7ZZ14GZ7095SSSZ2120 29.59 9 1070705011 K7ZZ14GZ7095SSSZ2170 29.79 10 1070705012 K7ZZ14GZ7095SSSZ1920 42.7 11 1070705013 K7ZZ14GZ7095SSSZ1970 42.85 12 1070705014 K7ZZ14GZ7095SSSZ1970 13.62 實在太感謝您了!!
老師請問一下 =VLOOKUP(I13,Sheet1!E1:J181,3) 裡面的I13是否可增加一組比對數字, 比對兩組訊息在帶出所需要的答案, 如何修改,一直找不到好的方法, 謝謝你了老師
如果想要使用VLOOKUP函數,又想要使用多條件,可以參考這篇:http://isvincent.pixnet.net/blog/post/47772759
老師您好.能寄郵件,麻煩您幫忙,教導函數的設定嗎?
請問老師: 我將公式轉貼至另外一個檔案後,{}不見了,而且變成#VALUE,請問有哪個步驟沒做到嗎? 謝謝老師
{}是陣列公式,輸入公式後按Ctrl+Shift+Enter鍵所自動產生的。應該是直接按下Enter鍵,所產生的#VALUE錯誤。
老師您好,想和你確認若想要有兩個條件篩選 但其中一個條件值為空白時,可以代出符合第一個條件的資料 這我可以參考哪一篇文章呢? 感謝您的指導
*****