使用XMATCH函數,進行商品單價的查詢-執行完全符合或小於的比對。
非得一模一樣才算找到資料,那麼「完全符合」的比對應該是無庸置疑的,但是,大多數的數值性資料,要進行的比對模式應該不僅止於「完全符合」的比對才是,例如:要尋找單價剛剛好等400元的資料?還是單價大於400元以上的資料?抑或是單價小於400元以下的資料?數值性的比對是不是就更多元了!若有這樣的需求,便是MATCH函數裡第三個參數(match_type),也就是XMATCH函數裡的第三個參數(match_mode)發揮功用的時候了。
例如:以下的實作範例,我們將在儲存格P5輸入單價,將此儲存格的內容視為(lookup_value)參數,並至資料範圍裡的「單價」欄位(lookup_array)進行查找比對,若想要查找剛好等於儲存格P5輸入所輸入的單價,或者比此單價小但最接近此單價的最大值,那麼,MATCH函數裡第三個參數(match_type)就要設定為「1」了:
=MATCH(P5,單價,1)
以下圖為例,我們在儲存格P5裡輸入了查詢值「400」,也在儲存格P7裡建立了上述的MATCH函數,並設定match_type參數為「1」,完成後,查詢的結果是「6」。
奇怪,「單價」欄位裡由上而下的第6個位置之單價是283耶!可是,我們要查者的價格是400或比400小但最近400的單價,在整個「單價」欄位裡,應該是第9個位置的單價318才是我們期望的單價啊!
我們換換XMATCH函數試試,不過要特別注意的是此參數的第三個參數match_mode必須設定為「-1」才是傳回完全相等或者下一個較小值的項目之索引值,也就是等於該單價或者比單價小但又最接近此該單價的最大值:
=XMATCH(P5,單價,-1)
真的耶!XMATCH函數傳回的查詢值為400單價時,等於400或者比400小但最接近400的單價,正是整個「單價」欄位裡第9個位置(單價318)。
原來,這正是MATCH函數與XMATCH函數其第三個參數最大的差異。由於MATCH函數的第三個參數match_type,僅有1、0與-1等三種選擇,表示資料進行查找時的比對型態,若設定為「0」表示查詢的資料比須是完全符合才算找到資料,而查詢的範圍或陣列(也就是第二個參數lookup_array)的內容並不需要事先排序。但是,此參數若設定為「1」,代表要查找的資料必須是等於查詢值或小於但又接近於查詢值的資料,不過,查詢的範圍或陣列必須事先以遞增順序排序才行。如下圖所示,若查詢的範圍「單價」欄位已經事先由小到大的遞增排序了,那麼MATCH函數的查詢才不會有問題。
(文章內容實作範例下載)
XMATCH的實例應用系列文章:
- 商品代碼的查詢-完全符合的比對(1/5)
- 商品單價的查詢-完全符合或小於的比對(2/5)
- 商品代碼的查詢-完全符合或大於的比對(3/5)
- 生卒年份的查詢-完萬用字元的比對(4/5)
- 資料查找模式的綜合應用(5/5)