接續著上次的 AND、OR、NOT(一):多條件判斷,我今天想要實際舉個簡單的例子,帶大家了解怎麼實際使用這些函式。在這之前,我們小小複習一下它們是什麼:
AND
跟 OR
的函式語法是一樣的:
=AND(條件一, [條件二], [條件三]...)
=OR(條件一, [條件二], [條件三]...)
把要判斷的條件放在括號裡面,並用逗號隔開。而 AND 跟 OR 的差異在於:
AND
:只有全部條件為 TRUE
,那結果才會是 TRUE
OR
:只要任一條件為 TRUE
,那結果就會是 TRUE
再來就是 NOT
,語法也很單純,只要把會 TRUE
、FALSE
或會產生布林值的函式放在括號裡面即可:
=NOT(條件)
而 NOT
的作用則是把布林值反轉,TRUE
變 FALSE
、FALSE
變 TRUE
。
好,我們開始囉!
歡迎先到這邊複製練習用的試算表,一起練習!
你是在烏石港經營某背包客棧的老闆,你打算用你們客棧現有的會員卡制度,推出一波行銷活動,吸引有卡的客人再回來你這住。
你想訂的規則是:
你收到這樣的訂單資訊,要來結算每個客人折扣後的金額:
怎麼做呢?我們先檢視並統整一下:
第一個條件就是 AND
很好的應用方式:
AND(衝浪之友 = 有, 海洋之友 = 有)
第二個條件就是 OR
了:
OR(衝浪之友 = 有, 海洋之友 = 有)
再來可以用 IFS
(多條件判斷),條列上面的兩個條件,並加上價格計算:
IFS(
AND(衝浪之友 = 有, 海洋之友 = 有), 原價 * 0.8,
OR(衝浪之友 = 有, 海洋之友 = 有), 原價 * 0.9)
最後,考量到這兩個條件如果都沒有符合,就會是第三個條件了。
因為 IFS
在沒達成條件時,會出現 #N/A
的錯誤,這時候就在外面再包一層 IFNA
,處理這樣的狀況即可。(延伸閱讀: 處理錯誤的 IFNA 跟 IFERROR)
IFNA(..., 原價)
所以結合起來就是:
=IFNA(
IFS(
AND(衝浪之友 = 有, 海洋之友 = 有), 原價 * 0.8,
OR(衝浪之友 = 有, 海洋之友 = 有), 原價 * 0.9),
原價)
那我們回到表格,把相對應的儲存格位址填入就好了。我們在 E2
寫上:
=IFNA(
IFS(
AND(C2 = "有", D2 = "有"), B2 * 0.8,
OR(C2 = "有", D2 = "有"), B2 * 0.9),
B2)
按下 Enter 看看:
以許先生的狀況來看,他的消費金額是 2500 元,有衝浪之友的會員卡、沒有海洋之友的會員卡,所以是打 9 折。那麽,他最後折扣後的金額就是:
2500 * 0.9 = 2250
看來試算表有把這個算式處理好了。我們再把它往下複製到最後一列:
這樣就做完了!保險起見,來驗證幾筆資料,看看金額有沒有錯誤:
2700 * 0,8
),折扣後金額是 2160 元,正確!說實在,我個人不常用 NOT
,因為通常我在寫條件判斷的時候,通常是用正面的角度想,也就是:
「如果 A 發生了就是 A 狀況、如果B發生了就是 B 狀況」
而很少以反面的角度想,像是:
「如果 A 沒發生就是 A 狀況、如果 B 沒發生了就是 B 狀況」
而我會用到 NOT
的少數狀況之一,大概是「想把一大串條件反轉」的時候。舉例來說,我在今年 7 月寫了一篇 條件式格式(二):自訂公式 的教學,在文章的最後,我試著用 Google 試算表來判斷身份證字號是否正確,寫了這串東西:
=AND(
IF(LEN(A1) = 10, TRUE, FALSE),
REGEXMATCH(LEFT(A1, 1), "[A-Z]"),
IFERROR(OR(VALUE(MID(A1, 2, 1)) = 1,
VALUE(MID(A1, 2, 1)) = 2,
VALUE(MID(A1, 2, 1)) = 8,
VALUE(MID(A1, 2, 1)) = 9), FALSE),
IFERROR(IF(MOD(SUM(
SWITCH(LEFT(A1, 1),
"A", 1, "B", 10, "C", 19, "D", 28, "E", 37, "F", 46, "G", 55,
"H", 64, "I", 39, "J", 73, "K", 82, "L", 2, "M", 11, "N", 20,
"O", 48, "P", 29, "Q", 38, "R", 47, "S", 56, "T", 65, "U", 74,
"V", 83, "W", 21, "X", 3, "Y", 12, "Z", 30),
VALUE(MID(A1, 2, 1)) * 8, VALUE(MID(A1, 3, 1)) * 7,
VALUE(MID(A1, 4, 1)) * 6, VALUE(MID(A1, 5, 1)) * 5,
VALUE(MID(A1, 6, 1)) * 4, VALUE(MID(A1, 7, 1)) * 3,
VALUE(MID(A1, 8, 1)) * 2, VALUE(MID(A1, 9, 1)) * 1,
VALUE(MID(A1, 10, 1)) * 1), 10) = 0, TRUE, FALSE), FALSE)
)
簡單來說,上面這串就是以 AND
判斷身份證字號是否正確的四個條件,簡化如下:
=AND(
條件一,
條件二,
條件三,
條件四
)
如果各個條件都有符合,那麼最終結果是 TRUE
,身份證字號就是正確的了。當時的狀況是如果自訂公式是 TRUE
,那麼就會套用條件式格式(讓儲存格變綠、字體變粗等等)。
可是,如果我要做的是「如果身份證驗證沒通過,也就是四個條件其中有一個不符合條件,則顯示條件式格式」呢?
我們先回想一下剛剛的 AND
:
=AND(條件一, 條件二, 條件三, 條件四)
假設全部條件都是 TRUE
,只有條件一是 FALSE
,那 AND
也會回傳 FALSE
:
=AND(FALSE, TRUE, TRUE, TRUE)
=AND(FALSE)
因為 AND
的結果是 FALSE
,這樣反而就不會出現條件式格式了。
那,只要我把這個邏輯反轉過來,給個 NOT
看看呢?像是這樣:
=NOT(AND(條件一, 條件二, 條件三, 條件四))
舉例來說,如果符合身份證字號的驗證條件都有符合:
=NOT(AND(TRUE, TRUE, TRUE, TRUE)
=NOT(AND(TRUE))
=NOT(TRUE)
=FALSE
最後就是 FALSE
,那麼條件式格式不會啟動。
那如果驗證條件有一個不符合(數個不符甚至全部不符也是):
=NOT(AND(TRUE, TRUE, TRUE, FALSE)
=NOT(AND(FALSE))
=NOT(FALSE)
=TRUE
結果顯示 TRUE
,條件式格式就會啟動了!這就是我其中一個 NOT
的應用例子。
如果你喜歡這次的文章,歡迎你透過這些方法支持我:
想要看更多文章,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!
我是喜特先生,Mr. Sheet,我們下個教學見!