善用CHOOSE函數重組所要查詢的範圍~
接著,我們再來介紹另一個讓VLOOKUP在垂直查詢後能夠自右向左擷取資料的方式,那就是利用CHOOSE函數結合VLOOKUP完成這類的查詢應用。
首先,先瞭解一下CHOOSE函數的語法:
首先,先瞭解一下CHOOSE函數的語法:
=CHOOSE(index_num, value1, value2, value3…..up to 254 values)
其基本用法為:
=CHOOSE(n,值1, 值2, 值3, 值4,….)
簡單的說,CHOOSE函數的第1個參數是稱之為索引編號的整數值,而接續的第2、第3、第4、….個參數是自訂個常數(文字或數字),最多可定義254個值。透過CHOOSE函數的執行,可以傳回所定義的第n個值。最典型的使用範例如下:
在儲存格B2輸入日期後,可以利用WEEKDAY函數,傳回這個日期是一週中的第幾天。
至於一週中的第1天是星期一?還是星期天?則由WEEKDAY函數的第2個參數來表示。
例如:
例如:
=WEEKDAY(B2,2)
表示一週中的第一天是星期一、第七天是星期日:
因此,=WEEKDAY(B2,2)函數可以傳回1到7整數值,接著,我們在利用CHOOSE函數,根據WEEKDAY(B2,2)的值,撰寫如下的CHOOSE函數:
=CHOOSE(B3,"星期一","星期二","星期三","星期四","星期五","星期六","星期日")
或直接寫成:
=CHOOSE(WEEKDAY(B2,2),"星期一","星期二","星期三","星期四","星期五","星期六","星期日")
如此,就可以因為儲存格B2的日期輸入,而傳回該日期是星期幾的文字了!
瞭解CHOOSE函數的基本使用方式後,現在我們可以透過在大括號{}裡定義一個以上的索引編號,作為CHOOSE函數的第1個參數,來傳回特定的範圍(如工號欄、地區欄、年資欄位...),而不是指定的值(如星期一、 星期二、 星期三、...等文字)。例如:
=CHOOSE({1,2},欄1範圍,欄2範圍)
如此便表示,此CHOOSE函數會執行2次,分別是大括弧裡的1所代表的欄1範圍,以及大括弧裡的2所代表的欄2範圍。以如下的儲存格內容為例:
若是以下的CHOOSE函數寫法:
=CHOOSE({1,2},$H$3:$H$16,$G$3:$G$16)
執行後,CHOOSE所傳回的是一個兩欄位的範圍,其中,左欄是$H$3:$H$16、右欄位是$G$3:$G$16,也就是:
如果這個CHOOSE所傳回範圍,作為VLOOKUP函數的第2個參數,那問題不就解決了嗎?
=VLOOKUP("Q3440", CHOOSE({1,2},$H$3:$H$16,$G$3:$G$16),2, FALSE)
查詢比對範圍有左至右的第2欄(類別)。
將可以查詢出"Q2228"的組別,傳回結果為:管理
將可以查詢出"Q2228"的組別,傳回結果為:管理
若將原本的範圍名稱進行適度的命名,例如:
工號=$H$3:$H$16
地區=$F$3:$F$16
年資=$J$3:$J$16
姓名=$I$3:$I$16
組別=$G$3:$G$16
工號=$H$3:$H$16
地區=$F$3:$F$16
年資=$J$3:$J$16
姓名=$I$3:$I$16
組別=$G$3:$G$16
則剛剛的函數可以寫成更具閱讀性的:
=VLOOKUP("Q2228", CHOOSE({1,2},工號,組別),2, FALSE)
甚至,我們可以再擴充大括弧裡索引編號的定義,寫成{1,2,3,4,5}作為CHOOSE函數裡的第1個參數,緊接著再描述5個欄位範圍,例如:依序為:工號,組別,年資,姓名,地區。即:
CHOOSE({1,2,3,4,5},工號,組別,年資,姓名,地區)
便表示此CHOOSE函數由左至右組合了5個範圍:
只要此CHOOSE所傳回範圍中,最左邊的欄位範圍一定是固定為「工號」欄位,其餘的欄位再由左至右陳列,便可以作為VLOOKUP函數的第2個參數,那麼,透過指定的工號,查詢所屬的「組別」、「年資」、「姓名」、「地區」等資訊,就不是問題了!
只要此CHOOSE所傳回範圍中,最左邊的欄位範圍一定是固定為「工號」欄位,其餘的欄位再由左至右陳列,便可以作為VLOOKUP函數的第2個參數,那麼,透過指定的工號,查詢所屬的「組別」、「年資」、「姓名」、「地區」等資訊,就不是問題了!
=VLOOKUP("Q2228",CHOOSE({1,2,3,4,5},工號,組別,年資,姓名,地區),4,FALSE)
查詢比對範圍有左至右的第4欄(姓名)。
將可以查詢出"Q2228"的姓名,傳回結果為:周述德
這招VLOOKUP搭配CHOOSE的做法,讓VLOOKUP在垂直查詢後能夠自右向左擷取資料,不錯吧!