Excel陣列公式的邏輯布林運算實作 - Excel運算式與公式系列(6/6)

邏輯陣列的運算常常是Excel使用者較容易混淆的地方,我們就以簡單易懂的範例實作,來釐清這模糊地帶。

若要針對Excel陣列公式進行布林邏輯運算時,有沒有什麼要注意的地方呢?。在學習這個話題之前,若您對於Excel的邏輯運算仍感生疏,可以先參酌筆者Excel的模擬實作邏輯運算一文。至於陣列公式的基本認識的實作練習,也可以參考[從簡單範例談談Excel的陣列公式(1)~(8)]系列文章。

邏輯陣列的AND運算

以下的實作範例是員工三次考績的成績資料,記錄在B、C、D三個欄位。若及格的分數標準是60(含)分以上,則可以輕易地的建立關係判斷式進條件的比較。以單一儲存格的成績內容判別,可以撰寫成下列的關係運算式:

=B2>=60

即可傳回B2的內容是否>=60的判斷結果。若以陣列公式的角度來看,可以撰寫成以下的關係運算式:

B2:B7>=60

或者

第1次考績>=60

這兩者的差別是:

  • 「B2>=60」關係運算式可傳回一個邏輯值(TRUE或FALSE)
  • 「第1次考績>=60」關係運算式可傳回一組(多個)邏輯值,也就是一堆的TRUE與FALSE值

所以,以整批處理的概念來看,後者的陣列處理要顯得有意思囉!不過,不同版本的Excel在後者的公式建立上,是有點小差異的。在Excel 2019(含)以前,建立會傳回多個結果值的陣列公式或運算式之前,要事先選取範圍以存放所傳回的結果值,然後才輸入公式並按下Ctrl+Shift+Enter複合按鍵。可是,基於Excel 365具備動態陣列參照的技術,會自動判別並自動延伸陣列公式所需的大小範圍,因此,僅需在單一除純存格裡輸入陣列公式即可。

根據上述的說明以及此實作範例的內容,可以在三個地方(F、G、H)分別建立三個陣列公式,以傳回每位員工三次考績分數是否及格的邏輯判斷。

如果要統計三次考績分數都及格的員工共有幾位,也就是三次考績分數的邏輯判斷都是TRUE(考績分數>=60)的員工,那麼,AND邏輯的判斷絕對是非常適合的,語意上也正是:第1次考績分數>=60「而且」第2次考績分數>=60「而且」第4次考績分數>=60。在邏輯運算上,AND邏輯是一種乘法的算術運算(在Excel的邏輯運算模擬實作一文曾有詳細介紹與實作),因此,我們可以將三次考績分數都必須及格的邏輯判斷式寫成:

=(第1次考績>=60)*(第2次考績>=60)*(第3次考績>=60)

那麼,這個邏輯運算式的結果一定不是0就是1。若是0就代表三次考績分數中至少有一次不及格;若是1則代表三次的考績分數都是及格的。將這一些0、1加總起來,不就是三次考績分數都及格的員工人數了嗎!

有些學員曾經問過,明知道是要進行AND邏輯的運算,為什麼我們不直接使用AND函數來獲得相同的結果,而是要採用乘法的算式呢?我想問題就在於AND函數其主旨是在傳回參數裡的運算元之AND邏輯結果值,這個值不是TRUE就是FALSE,若AND函數括弧裡的參數不只一個,甚至可能是整個陣列,乃至多個陣列,此時執行AND函數後的結果也只是傳回這些參數內容的AND邏輯結果,也就是一個TRUE或FALSE邏輯值而已,並不是傳回包含一堆邏輯值的陣列。

所以,此例若是以AND邏輯函數進行邏輯值陣列的運算,傳回的結果僅是一個邏輯值而已,不太適合這個範例的需求。

但是我們若是以算術運算中的乘法運算來處理這個問題時,基於邏輯值(TRUE與FALSE)進行算術運算時產生的結果並不是邏輯值,而是數值0與1的原則,在充滿邏輯值的陣列與陣列相乘後的結果,所傳回的內容也會是一個陣列的乘積結果,因此,這個陣列內容並不是一堆TRUE與FALSE,而是一堆1與0。

因此,最終的結果是一個包含了數值0或1的陣列,而數值1就代表三個關係判斷結果都是TRUE,也就是三次考績分數都及格的成員。

邏輯陣列的OR運算

如果我們將上述的乘法運算式改成加法運算,那麼便是屬於OR(或)的邏輯運算,則相對應的陣列裡0和1將進行相加,最終傳回的陣列便是一個包含數值加總的結果陣列。而裡面的數值便代表著每一個成員在三次考績中,考績分數及格的次數。

我們再加碼一下這個實作範例的難度,假設每位員工除了有三次考績外,也都有英文檢定與資安檢定的成績,而英文檢定成績的及格標準是至少700分,而資安檢定的分數則必須是800(含)以上。綜合這些成績,我們訂出了員工升等考核必須符合以下的評量規範:

  • 條件A:三次考績中至少要兩次考績分數及格。
  • 條件B:兩項檢定(英文檢定與資安檢定)中必須有一項檢定是及格的。
  • 同時具備條件A與條件B才能通過員工升等考核。

因此,條件A即為三次考績的OR邏輯加法運算結果,必須>=2:

((第1次考績>=60)+(第2次考績>=60)+(第3次考績>=60))>=2

而條件B亦為OR邏輯加法運算,其運算結果若是0,表示兩次檢定都不及格,若是1則表示其中有一次檢定是及格的,若結果是2就是兩次檢定都及格囉!這兩次檢定成績是否及格的邏輯陣列之加法運算式可寫成:

(英文檢定>=700)+(資安檢定>=800)

符合條件B,至少要有一次檢定是及格的算式便可以寫成: 

((英文檢定>=700)+(資安檢定>=800))>=1

條件A與條件B都必須成立才算是過員工升等考核,因此,條件A與條件B是屬於AND邏輯的關係的乘法運算,所以,組合起來的算式便是:

(((第1次考績>=60)+(第2次考績>=60)+(第3次考績>=60))>=2)  * (((英文檢定>=700)+(資安檢定>=800))>=1)

註:此Excel文章之實作活頁簿檔案下載