
IF 函數是 EXCEL 中30個必學函數之一。我們可以透過 IF 函數設定某個條件,滿足該條件時回傳 A 值,不滿足時則回傳 B 值,使整理資料時更加有效率。
本文將會用 5 分鐘的時間,教會你 IF 函數的基本用法、範例教學、3種IF多條件設定方法、格式化條件變色、判定日期範圍以及常見錯誤等等。
那麼我們就開始吧!
IF 函數基本用法
IF 函數用於設定某個條件,滿足該條件時回傳 A 值,不滿足時則回傳 B 值。以下是 IF 函數的語法:
=IFNA(logical_test,[value_if_true],[value_if_false])
引數名稱 | 解釋 |
---|---|
logical_test | 又稱「邏輯表示式」。通常是「C3>100」、「C3=”已付款”」等條件,計算後只會有 TRUE / FALSE 兩種結果。 |
[value_if_true] | 如果條件為 TRUE,則回傳…… |
[value_if_false] | 如果條件為 FALSE,則回傳…… |
接著,我們來看看IF函數的範例教學。
IF 函數範例教學
假設我們想要知道班上學生的及格狀況,利用 IF 函數就可以很快地讓及格的顯示「V」,不及格的顯示「X」:
=IF(B2>=60,"V","X")

引數名稱 | 解釋 | 範例 |
---|---|---|
logical_test | 邏輯表示式 | B2>=60(判斷 B2>=60 為 TRUE 還是 FALSE) |
[value_if_true] | 如果條件為 TRUE,則回傳…… | “V”(如果 B2>=60 為 TRUE,回傳 V) |
[value_if_false] | 如果條件為 FALSE,則回傳…… | “X”(如果 B2>=60 為 FALSE,回傳 X) |
或者,我們也可以透過 IF 函數幫不及格的分數乘上 1.1 倍:
=IF(B2>=60,B2,B2*1.1)

IF 函數也可以用於判斷文字條件:
=IF(B2="男","V","X")

最後,補充一些常用的邏輯表示式:
使用情境(與數字有關) | 邏輯表示式 |
---|---|
如果C3大於60 | =IF(C3>60, ……) |
如果C3大於等於60 | =IF(C3>=60, ……) |
如果C3小於60 | =IF(C3<60, ……) |
如果C3小於等於60 | =IF(C3<=60, ……) |
如果C3等於60 | =IF(C3=60, ……) |
如果C3不等於60 | =IF(C3<>60, ……),EXCEL 中的「<>」代表「≠」 |
使用情境(與文字有關) | 邏輯表示式 |
---|---|
如果C3是空的資料 | =IF(C3=””, ……) |
如果C3不是空的資料 | =IF(C3<>””, ……) |
如果C3等於「男生」 | =IF(C3=”男生”, ……) |
如果C3不等於「男生」 | =IF(C3<>”男生”, ……) |
IF 函數 3 種多條件用法
IF 函數設定多條件的方法有 3 種,各有各的用途:
- 在 IF 裡面加入 AND、OR 函數:用於處理「A且B」以及「A或B」的條件
- 多層 IF 的巢狀結構:用於處理分段條件
- 直接改用 IFS 函數:也用於處理分段條件,但比巢狀 IF 簡潔很多
IF 函數多條件用法 1:搭配 AND、OR 處理「A且B」及「A或B」
處理「A且B」以及「A或B」的條件時,我們可以在 IF 函數中加入 AND 函數與 OR 函數,增加條件的變化性。
使用範例:利用 IF+AND 函數找出「國文及格且英文及格」的人:
=IF(AND(B2>=60,C2>=60),"V","X")

當兩個條件皆為 TRUE 時,AND 就會回傳 TRUE,IF 函數收到 TRUE 便會回傳「V」;當有其中一個條件為 FALSE 時,AND 就會回傳 FALSE,IF 函數收到 FALSE 便會回傳「X」。
使用範例:利用 IF+OR 函數找出「國文及格或英文及格」的人:
=IF(OR(B2>=60,C2>=60),"V","X")

當其中一個條件為 TRUE 時,OR 就會回傳 TRUE,IF 函數收到 TRUE 便會回傳「V」;當有兩個條件皆為 FALSE 時,OR 就會回傳 FALSE,IF 函數收到 FALSE 便會回傳「X」。
另外,AND 與 OR 都可以包含 3 個條件以上:
=IF(AND(B2>=60,C2>=60,D2>=60),"V","X")

AND 函數只要有一個是 FALSE 就會回傳 FALSE,OR 函數只要有一個是 TRUE 就會回傳 TRUE。邏輯詳情可以看真值表。
IF 函數多條件用法 2:巢狀結構處理分段條件
如果我們要設定分段條件,則可以利用 IF 巢狀結構,也就是一層 IF 包另一層 IF,一直包到所有分段條件都設定完畢。
使用範例:如果分數高於 80 分回傳「讚」,高於 60 分回傳「中等」,否則回傳「不及格」:
=IF(B2>=60,IF(B2>=80,"讚", "中等" ), "不及格" )

當第一層條件為 TRUE 時,則會進入下一層條件,直到滿足最裡面一層或中途不滿足條件而停止。
如果還是不太清楚,以下是該 IF 函數的運算過程:
- 外層IF函數:判斷78是否大於等於60?TRUE ➠ 測試內層IF函數。
- 內層IF函數:判斷78是否大於等於80?FALSE ➠ 回傳「中等」,運算結束。
接下來再複雜一點,進入到 3 層 IF 函數,將分數分為 4 個區間。
使用範例:如果分數高於 90 分回傳「優秀」,高於 80 分回傳「讚」,高於 60 分回傳「中等」,否則回傳「不及格」:
=IF(B2>=60,IF(B2>=80,IF(B2>=90,"優秀","讚"),"中等"),"不及格")

以下是該 IF 函數的運算過程:
如果分數是 96 分:
- 外層IF函數:判斷96是否大於等於60?TRUE ➠ 測試中層IF函數。
- 中層IF函數:判斷96是否大於等於80?TRUE ➠ 測試內層IF函數。
- 內層IF函數:判斷96是否大於等於90?TRUE ➠ 回傳「優秀」,運算結束。
如果分數是 74 分:
- 外層IF函數:判斷74是否大於等於60?TRUE ➠ 測試中層IF函數。
- 中層IF函數:判斷74是否大於等於80?FALSE ➠ 回傳「中等」,運算結束。
如果看到這裡開始暈頭轉向的話,你可以試試看用接下來介紹的 IFS 函數處理分段,會舒服超級多。
IF 函數多條件用法 3:改用 IFS 函數更好處理分段條件
事實上,IF 函數還有一個多條件版本的函數,就是 IFS 函數。IFS 函數用於根據多個條件進行邏輯測試,並返回首個符合條件的結果,以避免使用過於複雜的巢狀 IF 函數,讓公式更加簡潔。
以下是 IFS 函數的語法:
=IFS(test1,value1,test2,value2,...)
引數 | 解釋 |
---|---|
test1 | 邏輯表示式1 |
value1 | 如果邏輯表示式1為TRUE,則回傳…… |
test2 | 邏輯表示式2 |
value2 | 如果邏輯表示式2為TRUE,則回傳…… |
IFS 函數會先檢查「邏輯表示式1」是否為 TRUE,為 TRUE 就顯示「value1」設定的值,不為TRUE就繼續檢查「邏輯表示式2」,以此類推,直到最後一個引數檢查完畢。
使用範例:我們沿用前面 IF 巢狀結構的例子,但是這次是用 IFS 函數去設定多條件:
=IFS(B2>=90,"優秀",B2>=80,"讚",B2>=60,"中等",B2<60,"不及格")

如此一來 IFS 函數就可以將班上的分數進行分段囉!IFS 函數是不是比 IF 的巢狀還要更簡潔易懂呢!
IF 進階用法 1:利用條件式格式設定變色
我們可以利用 EXCEL 的「條件式格式設定」將符合條件的儲存格進行變色。
當我們點擊「常用」⭢「條件式格式設定」⭢「新增規則」,並選取最下面的「使用公式來決定要格式化哪些儲存格」時,會看到「格式化在此公式為True的值」:

也就是說,在這裡要輸入的公式,結果只能是 TRUE,EXCEL 才會將該儲存格依照我們設定的格式去調整。
因此,這裡要輸入的並不是 IF 函數,而是 IF 函數的第一個引數,也就是只會回傳 TRUE 或 FALSE 的「邏輯表示式」。
當邏輯表示式為 TRUE 時,EXCEL 才會進行變色等格式套用。
使用範例:將不及格的分數用黃色底標註出來:
STEP. 1:我們先選取資料範圍,並點擊「常用」⭢「條件式格式設定」⭢「新增規則」。

STEP. 2:選取最下面的「使用公式來決定要格式化哪些儲存格」,並在公式處輸入:
=B2<60

STEP. 3:點擊「格式」,並設定希望變色的儲存格顏色、文字顏色等等,最後按下「確定」。

STEP. 4:就可以看到「<60為 TRUE」的儲存格依照我們設定的格式進行變色啦!

IF 進階用法 2:條件判斷日期範圍
因為在 EXCEL 的眼中,日期其實就是不斷累加的 5 位數字,像是 2024/10/22 是 45587,2024/10/23 是 45588,以此類推。
因此,若要設定日期範圍,只要利用 DATEVALUE 函數將日期轉為數字,再去比較大小即可。
使用範例:將屬於 2024 下半年(介於 2024/07/01~2024/12/31)的日期打勾:
=IF(AND(A2>=DATEVALUE("2024/07/01"),A2<=DATEVALUE("2024/12/31")),"V","X")

IF 常見錯誤(#VALUE!、#NAME!、#REF!)
- #VALUE!:當邏輯運算式的結果是不支援的資料類型時,就會顯示#VALUE!。
- #NAME!:通常是由於輸入了錯誤的語法,或者引用了錯誤的儲存格,導致IF函數無法正常運作
- #REF!:原本參照的儲存格被刪除或異常。
IF 溫馨提醒
- IF 函數運算是由左到右執行測試,而非從最裡面的括號先開始運算。
- 條件要設定「A且B」或「A或B」時,建議使用AND/OR函數;若顯示結果有分區間(如優/甲/乙/丙/待加強)則使用 IF 巢狀結構或IFS。
- 使用IF巢狀結構時,最外層放置條件最寬鬆的IF函數,越往內條件越嚴格(如:第一層分數大於60、第二層分數大於70、第三層分數大於80……)
- 使用IFS時,最左邊放最嚴格的條件,越往右邊條件越寬鬆。
延伸閱讀:IF 系列函數總整理
- IF 函數:用於設定某個條件,滿足該條件時回傳 A 值,不滿足時則回傳 B 值。
- IFS 函數:用於設定分段條件,每個條件都會回傳一種值
- IFERROR 函數:可以自訂回傳值取代所有錯誤。
- IFNA 函數:可以自訂回傳值取代 #NA錯誤。
Hey people!!!!!
Good mood and good luck to everyone!!!!!
Thanks!
Wish you have a nice day too!!
您好
真的很謝謝您願意免費分享這樣的教學內容!
請教以下這段教學內容後面解說語法的部分是否有誤?
=IF(C3>=60,IF(C3>=70,IF(C3>=80,IF(C3>=90,”優”,”甲”),”乙”),”丙”),”待加強”)//如果C3大於等於60的話就再去檢查D3是否大於等於60,否則顯示X
Hi~
已經修正囉!感謝細心提醒!
如果C3大於等於60:=IF(C360,……)
這段似乎忙中有誤
Hi~
歐我的天啊,我這段的typo也太多了吧!
感謝提醒,已修正!
謝謝您的教學,非常簡單易懂!
感謝!
=IF(AND(K2087,L2087,M2087,N2087,O2087,P2087,Q2087,R2087,S2087,T2087,U2087,V2087,W2087,X2087,Y2087,Z2087,AA2087,AB2087,AC2087,AD2087=VALUE(TRIM(CLEAN(J2087)))), “OK”, “NG”)
請問哪裡有錯誤,前面無法抓到錯誤(求解)
Hi~
錯誤應該是出在AND函數上喔。
AND函數每一個引數都要是一個BOOLEAN(TRUE或是FALSE),所以我們在AND函數中的每個引數都應該放進一個條件判斷式。
用這個例子來修改就是:
=IF(AND(K2087,L2087,M2087,N2087,O2087,P2087,Q2087,R2087,S2087,T2087,U2087,V2087,W2087,X2087,Y2087,Z2087,AA2087,AB2087,AC2087,AD2087=VALUE(TRIM(CLEAN(J2087)))), “OK”, “NG”)
變成:
=IF(AND(K2087=VALUE(TRIM(CLEAN(J2087))), L2087=VALUE(TRIM(CLEAN(J2087))), M2087=VALUE(TRIM(CLEAN(J2087))), N2087=VALUE(TRIM(CLEAN(J2087))), O2087=VALUE(TRIM(CLEAN(J2087))), P2087=VALUE(TRIM(CLEAN(J2087))), Q2087=VALUE(TRIM(CLEAN(J2087))), R2087=VALUE(TRIM(CLEAN(J2087))), S2087=VALUE(TRIM(CLEAN(J2087))), T2087=VALUE(TRIM(CLEAN(J2087))), U2087=VALUE(TRIM(CLEAN(J2087))), V2087=VALUE(TRIM(CLEAN(J2087))), W2087=VALUE(TRIM(CLEAN(J2087))), X2087=VALUE(TRIM(CLEAN(J2087))), Y2087=VALUE(TRIM(CLEAN(J2087))), Z2087=VALUE(TRIM(CLEAN(J2087))), AA2087=VALUE(TRIM(CLEAN(J2087))), AB2087=VALUE(TRIM(CLEAN(J2087))), AC2087=VALUE(TRIM(CLEAN(J2087))), AD2087=VALUE(TRIM(CLEAN(J2087)))), “OK”, “NG”)
簡單來說,每個2087都要過一次判斷式,讓值變成BOOLEAN,而當每一個判斷結果都是TRUE,最後才會顯示OK。
BTW,這個公式可能有點長,遇到這種又臭又長的公式我都會叫ChatGPT幫我簡化,以下是簡化結果,供你參考XD
=IF(SUMPRODUCT(–(K2087:AD2087=VALUE(TRIM(CLEAN(J2087)))))=20, “OK”, “NG”)
希望有幫助到你~
您好,文中(如下)是不是有誤?
數字類型(不等於的符號為):
如果C3大於60:=IF(C3>=60,……)
如果C3大於等於60:=IF(C360,……)
Hi~ 感謝指正,已經修改錯誤囉!