大小寫必須相符的查詢比對(1)

使用EXACT函數

前陣子在函數班的教育訓練課程中,有學員問到使用VLOOKUP資料查找的問題,在此與大家分享一下。如下範例,在儲存格H2輸入品號,查詢該品號的庫存量:

當然,這是一個典型的資料查找案例,使用VLOOKUP也應該可行,但為了輸入查詢資料的便利與準確,在此特別將儲存格H2透過資料驗證功能,設計成下拉式選單,以避免輸入錯誤的資訊,而此選單的來源則來自品號欄位,也就是儲存格範圍C3:C14。

在儲存格H2選取所要查詢的品號後,針對查詢範圍$C$3:$E$14即可進行資料查詢比對,透過VLOOKUP函數的撰寫,進行該品號的庫存量查詢,函數可以寫成:

=VLOOKUP(H2,$C$3:$E$14,3,FALSE)

在查詢「AY-1853」時,可以傳回717的庫存;若是查詢「BC-234」時,則可以傳回617的庫存:

不過,在查詢「bc-234」時,怎麼傳回的庫存還是617呢?

原來,使用VLOOKUP函數進行資料查找時,並不會區分大小寫,所以,查詢表裡的品號欄位,若有大小寫不同的相同內容時,VLOOKUP函數並無法分辨,所以,在進行查詢後就傳回了先出現的「BC-234」之庫存。若要以區分大小寫的方式來進行資料的查找,就得再藉由其他的函數來協助了!例如:EXACT函數就是可解決方式之一。透過以下的語法,若以陣列的角度來看,可以將$H$2與C3:C14(品牌)裡的每一個儲存格逐一比較,因此。會產生12個False或True的陣列:

=EXACT(H2,品號)

根據Excel陣列公式系列文章的第四篇:「從簡單範例談談Excel的陣列公式(4)」裡的介紹,提到了可以將非數值性的布林值轉換為數值1與0的一元運算子(unary operator),也就是透過「--」可以將上述的EXACT函數寫成:

=--EXACT(H2,品號)

如此就可以產生12個0或1的陣列:

因此,這個陣列裡的最大值,也正就是我們要查找的內容了,所以,可以再改寫成:

=MAX(--EXACT(H2,品號))

那麼,要到哪裡去比對這個值呢?猶記,在[實作VLOOKUP向左轉(2),使用IF函數]這篇文章裡曾經介紹以=IF({1,0},範圍1,範圍2)的語法來取得組合範圍。所以,在此範例中,我們可以透過以下的語法: 

=IF({1,0},--EXACT(H2,品號),庫存)

建構出如下的範圍:

整理一下先前所提及的:

=MAX(--EXACT(H2,品號))

是我們要查找的內容,也正是VLOOKUP的第1個參數。而剛剛論述的:

=IF({1,0},--EXACT(H2,品號),庫存)

便是我們要進行比對的比對範圍,也就是VLOOKUP的第個2參數,此範圍的第2個欄位是庫存資料,因此,是VLOOKUP的第個3參數,進行完全符合的比對後,形成如下所示的語法:

=VLOOKUP(MAX(--EXACT(H2,品號)),IF({1,0},--EXACT(H2,品號),庫存),2,0)

不過,切記,這是一個陣列公式的概念,因此,輸入完上述的VLOOKUP函數後,必須按下Ctrl+Shift+Enter喔!

如此便可以達到大小寫必須相符的查詢比對效果!當然,這絕對不是唯一的解,您也可以動手嘗試一下其他的解法喔!