巢串式的XLOOKUP運用。
使用過IF函數的朋友應該都知道,IF函數是一種二選一的分歧選擇,如果有三選一的條件判斷需求,那麼,IF裡還可以包含另一個IF巢串式撰寫方式,絕對是常見且實用的。而XLOOKUP函數未嘗不可如法泡製,進行XLOOKUP函數裡含有另一層XLOOKUP函數的應用。
以下範例的原始資料是一個棒球場的各觀眾席區域相對應之各種不同票券(共有全票、敬老票與學生票等三種)的價目表。我們建立一個查詢機制,能夠透過觀眾席區域的選擇,而查詢出該區域裡的票券售價。因此,選取或輸入的觀眾席區域名稱將是查詢值(lookup_value),資料表裡的[觀眾席區域]欄位是比對陣列(lookup_array),而想要傳回的查詢結果(return_array)是[全票]、[敬老票]、[學生票]等三個欄位中的某一欄票價陣列。例如:我們若先在儲存格H5裡輸入文字「全票」,表示我們想要進行此種票券的價格查詢,接著便可以在儲存格I5裡建立以下函數:
=XLOOKUP(H5,$C$2:$E$2,$C$3:$E$9)
利用XLOOKUP函數便可順利傳回此票券每一種席位的票價。
可是,我們要如何從這個陣列結果裡,取得我們所要的某一觀眾席區的票價呢?那當然就是在利用選取區域作為查詢值(lookup_value),對觀眾席區域欄位B3:B9(lookup_array)進行查找,將剛剛傳回的結果陣列視為想要傳回的查詢結果(return_array),那就大功告成啦!
以下我們就來建構這樣的查詢模式,但前置作業是先將儲存格範圍B2:E9建立成名為「球場票價表」的資料表格、設定儲存格I2的範圍名稱為「查詢區域」,並設定此儲存格為下拉式選單,其選單項目為來自觀眾席區域欄位裡的內容。如此,在建立XLOOKUP函數的公式時會較簡潔且容易編輯與閱讀。
當然,若要採用儲存格範圍名稱來建立公式參照,也是不錯的想法,因此,可以針對票價的資料來源、各個欄位名稱,票券種類名稱、觀眾席區域名稱,皆可進行相關範圍命名的設定。
在透過XLOOKUP函數的參照上,不論是傳統的儲存格位址參照,或是運用範圍名稱進行參照,抑或是透過資料表格的結構化參照,都可以順利進行查找的運算。當然,不要太介意公式輸入的文字長短或精簡與否,重要的是公式的可讀性、識別性、結構性,以及爾後需要擴充時的延展性,不見得簡短的公式就是好的撰寫技巧喔!例如:在儲存格H5裡輸入字串「學生票」,然後,透過範圍名稱參照的撰寫如下的XLOOKUP函數:
=XLOOKUP(H5,票券種類,各種票價)
即可取得學生票券的所有售價陣列,也就是各觀眾席區域裡的學生票價陣列。
我們再建立另一個XLOOKUP函數來說明另一個查詢的運作,即在名為「查詢區域」的儲存格I2裡輸入或選擇某一個觀眾席區域,然後將此值視為XLOOKUP函數的查詢值(lookup_value),並至觀眾席區域欄位(lookup_array)裡進行比對,而比對後所傳回的結果(return_array),便可以設定為某票券類型的售價陣列。以學生票券為例,就是前一個介紹的XLOOKLUP函數之查詢結果,因此,這個查詢函數可以撰寫成:
=XLOOKUP(查詢區域,觀眾席區域, XLOOKUP(H5,票券種類,各種票價))
我們將此上述函數撰寫在儲存格H5(學生票)的右側儲存格I5裡面。
所以,當「查詢區域」(儲存格I2)裡輸入或選擇了「內野C區」,且H5儲存格裡輸入了「學生票」後,上述兩個XLOOKUP函數的巢串式撰寫,便可傳回「內野C區」「學生票」的票價。
我們將H5儲存格改成下拉式選單,設定此儲存格為下拉式選單,而選單項目則來自各種票券種類,如此,選擇不同的票券類型,其選定的觀眾席區域之票價就立即顯示出來了!
如果並不是要以下拉式選單的方式查詢某單一票價,而是想要一次列出某觀眾席區域的三種票券價格,則僅需利用一個XLOOKUP函數,再加上TRANSPOSE轉置陣列函數,便可輕鬆達陣!如下圖所示為例,由於Excel 365的動態陣列參照特性,只要在儲存格J5輸入以下函數:
=TRANSPOSE(票券種類)
便可縱向陳列各種票券種類名稱。然後,在移至儲存格K5,繼續輸入以下函數:
=TRANSPOSE(XLOOKUP(查詢區域, 觀眾席區域, 各種票價))
便可以由此儲存格往下建立縱向陳列的各種票券價格。
(本文實作範例下載)