856

多條件篩選資料-使用IFERROROFFSETSMALLROW函數

示範檔

範例檔

856.XLSX

結果檔

856F.XLSX

如果我們要在庫存明細表(如下圖所示)中找尋某一類別(C),庫存數量為550差距50間的所有產品。

在前一單位錦子老師介紹過用進階篩選來完成,現在則是介紹使用多個函數一同作業來完成。

步驟1:在工作表中輸入如下圖準則資料。

步驟2:框選A欄到D欄,點取「公式 > 己定義之名稱 > 從選取範圍建立」圖示,如下圖所示。

步驟3:在【以選取範圍建立名稱】對話方塊,點取「頂端列」核取方塊,使其打勾,其他核取方塊為空白,如下圖所示。

步驟4:點取「確定」鈕,則建立好四個範圍名稱,如下圖所示。

步驟5:點取I2儲存格,輸入公式「=IFERROR(OFFSET($A$1,SMALL(IF((類別=$F$2)*(數量<=$G$2+50)*(數量>=G2-50),ROW(編號),""),ROW(1:1))-1,0),"")」後,按Ctrl+Shift+Enter鍵完成輸入。

【公式解析】

IF((類別=$F$2)*(數量<=$G$2+50)*(數量>=G2-50),ROW(編號),"") 是在判斷類別欄(B)是否有符合F2儲存格內容且數量欄(D)大於等於G2儲存格值加50及減50的資料,若有傳回其所在列的列號,否則傳回空白。

SMALL(IF((類別=$F$2)*(數量<=$G$2+50)*(數量>=G2-50),ROW(編號),""),ROW(1:1)) 抓取陣列傳回來最小的列號值(ROW(1:1)),向下複製依序為第2小的值、第3小的值依此類推。

OFFSET($A$1,SMALL(IF((類別=$F$2)*(數量<=$G$2+50)*(數量>=G2-50),ROW(編號),""),ROW(1:1))-1,0) 傳回從A1儲存格向下移動多少列(SMALL函數算出的列值再減1),欄位不動為0

=IFERROR(OFFSET($A$1,SMALL(IF((類別=$F$2)*(數量<=$G$2+50)*(數量>=G2-50),ROW(編號),""),ROW(1:1))-1,0),"") 如果傳回來的值是錯誤訊息,則將其變成空白。

步驟6:點取J2儲存格,輸入公式「=IFERROR(OFFSET($A$1,SMALL(IF((類別=$F$2)*(數量<=$G$2+50)*(數量>=G2-50),ROW(編號),""),ROW(1:1))-1,1),"")」後,按Ctrl+Shift+Enter鍵完成輸入。

步驟7:點取K2儲存格,輸入公式「=IFERROR(OFFSET($A$1,SMALL(IF((類別=$F$2)*(數量<=$G$2+50)*(數量>=G2-50),ROW(編號),""),ROW(1:1))-1,2),"")」後,按Ctrl+Shift+Enter鍵完成輸入。

步驟8:點取L2儲存格,輸入公式「=IFERROR(OFFSET($A$1,SMALL(IF((類別=$F$2)*(數量<=$G$2+50)*(數量>=G2-50),ROW(編號),""),ROW(1:1))-1,3),"")」後,按Ctrl+Shift+Enter鍵完成輸入。

步驟9:將I2:L2框選起來,再將滑鼠指標移到L2儲存格右下角拖拉方塊上方,待指標變為「+」時,按住滑鼠左鍵向右拖曳到L欄,再向下拖曳到L10儲存格,如下圖所示,Excel強吧!

公式複製到愈下面列愈好,以防列數不夠,答案未全部顯示。

今天的教程就到這裡啦。希望大家能有收穫!


arrow
arrow

    錦子老師 發表在 痞客邦 留言(0) 人氣()