XLOOKUP使用情境十七:符合AND邏輯的多重條件查詢

使用XLOOKUP進行多條件的邏輯查詢。

如果查照的準則依據不只一項,例如:必須同時輸入「品名」、「顏色」與「電商」等三項資料後才進行資料的查詢,並且僅顯示全部符合準則的資料記錄。這方面的查詢需求,是屬於多重條件判斷的邏輯判斷,我們就先來了解一下邏輯運算的特性吧!此次使用的範例是記載了各種滑鼠商品的品名、顏色、數量與承銷的電商資料,我們將藉由商品名稱、顏色以及電商名稱的輸入,透過XLOOKUP函數查詢出相關的商品資料記錄。

在資料的關係判斷上,我們可以透過>、=、<等關係運算子進行比較運算,這種比較運算在Excel我們稱之為邏輯測試(Logical Test),最典型且常見的就地方就是IF函數裡的第一個參數,可以進行條件成立與否的判別,而判別的結果一定不是True就是False。例如:儲存格X1的值若是100,則「X1<60」的邏輯測試將會被判別為不成立,而傳回FALSE;若儲存格Y1的值為45,則「Y1<60」的邏輯測試將會被判別為成立,而傳回TRUE。

因此,若以陣列的角度去看,整個欄位裡的每一個儲存格內容,皆逐一進行同一個邏輯測試後,將會傳回一堆的判別結果,也就是一個充滿True或False的陣列。以此例為例,如果將「品名」資料欄位的內容,與想要查找的產品「無言鼠」字串進行邏輯測試,比較兩者是否相等:

=(輸入商品=品名)

那麼,其邏輯測試結果就是一個包含True或False的陣列,而其中有多少個True便是「品名」資料欄位裡有多少個「無言鼠」商品囉!

同理,如果將「顏色」資料欄位的內容,與想要查找的產品顏色「紅」字串進行邏輯測試,比較兩者是否相等:

=(輸入顏色=顏色)

那麼,其邏輯測試結果也會是一個充滿True或False的陣列,而其中有多少個True便是產品的「顏色」資料欄位裡有多少個「紅」色商品。

依此類推,將想要查找的電商名稱「最愛買」字串,與「電商」資料欄位的內容,進行邏輯測試,比較兩者是否相等:

=(輸入電商=電商)

那麼,其邏輯測試結果定也會是一堆True或False的陣列,而其中有多少個True便是經銷產品的「電商」資料欄位裡有多少家是隸屬於「最愛買」電商。

關於邏輯運算

在數值運算上,大家熟悉的是加、減、乘、除等四則運算,以及乘冪(次方)、指數運算等等。至於邏輯測試的結果(TRUE與FALSE)也是可以進行運算的,我們稱之為布林邏輯(Boolean logic)運算。這是一種代數形式的運算,因此也稱之為布林代數(Boolean algebra),可以透過「且」(AND)、「或」(OR)、「非」(NOT)的基本運算子進行運算,而其結果即具備了若不是TRUE便是FALSE的二進制特性。而在Excel的眾多函數中,也提供有AND、OR、NOT等知名的邏輯運算函數可以進行相關的計算。針對邏輯運算的特性,我們可以透過以下的表格(吾人稱之為真值表Truth table)一窺究竟:

在布林代數的三種基本運算中,OR邏輯是屬於加法運算類型,因此,算式的撰寫上其算數符號的運用可以使用數學運算符號「+」加號來表示;而AND邏輯是屬於乘法運算類型,因此,在算數符號的運用上可以使用數學運算符號「*」乘號來表示。在Excel環境裡,工作表裡的公式如果使用的是AND函數、OR函數進行邏輯運算,傳回的結果便是TRUE或FALSE,不過,若公式裡的算式是使用數學運算符號(「+」或「*」)對TRUE值與FALS值進行運算,雖然也是屬於邏輯運算,不過,傳回的結果將會是以數學運算結果值0與1來表示,其中0表示FALSE、1表示TRUE。因此,如下圖所示,兩個判斷式「X1<60」與「Y1<60」的判斷結果,若透過AND函數進行邏輯運算,例如寫成:

=AND(X1<60, Y1<60)

所傳回的結果不是TRUE就是FALSE;而若是使用數學算式符號「*」來撰寫這兩個判斷式的AND邏輯測試,例如寫成:

=(X1<60) * (Y1<60)

這樣的寫法所傳回的結果不是1就是0。

就前面的說明您應該已經了解,條件判斷的測試結果,不是TRUE就是FALSE,所以,若有兩個條件判斷的測試結果,若再進行AND邏輯測試,則此結果一定也是非TRUE即FALSE。而在XLOOKUP函數的資料查詢應用上,如果有多組查詢準則必須定義,則使用布林邏輯運算來建構查詢條件,的確是非常容易的。將此觀念套用這個實務範例的應用,如果將前述的三個分別判斷輸入商品是否為品名欄位的內容、輸入顏色是否等於顏色欄位的內容,以及輸入電商是否是電商欄位裡的內容,所傳回三充滿TRUE值與FALSE值的結果陣列彼此相乘時,數學運算式的結果將會得到一個充滿1和0值陣列,如下所示:
 
 

如此,我們可以將各傳回的結果陣列視為查詢範圍,使用XLOOKUP函數在其中查找內容為「1」的資料,不就代表著這是同時符合所有準則(三個TRUE)條件的內容了嗎?而所設定的傳回陣列裡,第一個「1」所相對應的資料記錄便是我們所尋獲的查找結果了。

因此,請在此例的儲存格I8輸入以下的公式: 

=XLOOKUP(1,(品名=輸入品名)*(顏色=輸入顏色)*(電商=輸入電商),滑鼠銷售資料,"無產品資訊")

使用「1」做為作為查找值,即可尋獲同時符合品名、顏色以及電商資訊的資料記錄,若沒有找到合適的資料,也設定以「無產品資訊」字串來顯示函數的執行結果。

(本文實作範例下載)