XLOOKUP使用情境六:遞減的資料表查詢

XLOOKUP面臨遞增、遞減資料的查找比對都是輕鬆快意~

在級距性質的數值性資料裡,大約符合的資料比對模式是許多初次學習VLOOKUP函數愛不釋手的典型應用,但是,這也是VLOOKUP函數另一個「痛」點,因為,比對表的首欄,也就是各級距的數值資料,必須事先以遞增的方式陳列,否則無法正確的查找到資料。如下圖所示,名為表格2的資料表,首欄的業績級距是從3500000到100000的遞減順序呈現,那麼,在儲存格F11裡輸入某一業績金額後,以下的兩個VLOOKUP函數都無法正的找到該業績金額相對應的獎金比例與績效:

=VLOOKUP(F11,$A$12:$C$17,2,TRUE)

=VLOOKUP(F11,$A$12:$C$17,3,TRUE)

所以,沒有由小到大遞增排序的查詢欄位,是無法運用VLOOKUP函數進行大約符合比對的。

這一點,在XLOOKUP函數的第6個參數search_mode 正解決了這方面的困擾。此參數為資料查找模式的設定,共計有1、-1、2、-2等四種選項。若未設定此參數,則預設為1,代表要從第一個項目搜尋到最後一個項目;若設定此參數為-1,則代表要從最後一個項目搜尋到第一個項目;若設定為2,則代表要進行二進位搜尋,但資料預先為遞增排序;若是設定為-2,也是代表要進行二進位搜尋,但資料預先為遞減排序)。
在資料結構中,各種排序的演算法(Sort Algorithm)各有其優缺點,其中,二進制排序(Binary Sort)的搜尋與逐一比對資料的搜尋相比,自然是快速許多,不過,採用二進制排序搜尋時,必須對搜尋的資料事先進行排序,才會正確又快速的搜尋資料,若是查找的資料沒有適當的排序,則進行的搜尋將會是無效的查詢結果。而既然資料要事先進行排序,就會有所謂的遞增(Ascending,由小到大)或是遞減(Descending order,由大到小)排序。而在XLOOKUP的第6個參數 - Search mode正是用來設定要查找比對的資料查詢模式。此範例的表格2要查詢的資料是業績欄位,而此欄位的內容是遞減排序,因此,行在進行大約符合的比對時,若是由最後一筆資料開始,往上逐一比對就可以順利找到資料,但若是採用二進制演算法的遞減查詢模式進行資料的查找會是很有效率的。
以下的XLOOKUP函數可以進行獎金比例的查找:

=XLOOKUP(F11,表格2[業績],表格2[獎金比例],,-1,-2)

以下的XLOOKUP函數可以進行績效等級的查找:

=XLOOKUP(F11,表格2[業績],表格2[績效],,-1,-2)

使用XLOOKUP函數是不是比VLOOKUP更有彈性呢!


XLOOKUP的第6個參數Search_Mode:

參數值意義
1(預設值)代表由第一筆資料開始查找,往下逐一比對資料。
-1代表由最後一筆資料開始查找,往上逐一比對資料。
2代表以二進制的演算法進行資料的查找,但查找範圍裡的資料必須是遞增順序。
-2代表以二進制的演算法進行資料的查找,但查找範圍裡的資料必須是遞減順序。

以這樣的觀點來看,若是查詢比對的資料欄位,有著由小到大的遞增排列,則第6個參數Search_Mode的設定,也可以設定為1或2。若是查詢比對的資料欄位,有著由大到小的遞減排列,則第6個參數Search_Mode的設定,也可以設定為-1或-2。只是,1與-1是屬於循序比較資料的演算法,而2與-2是屬於二進制搜尋演算法,效能是不一樣的!

(本文實作範例下載)