為什麼我的條件式格式明明寫了自訂公式,顏色卻整排差一列、或是整欄都變色?多半是 $ 放錯位置,或是公式回傳了錯誤值,規則默默不套用。
怎麼新增規則、單色條件有哪些,在 條件式格式設定 講過;到期提醒與狀態看板的做法在 條件式格式實戰。這篇專門收會出錯的地方。每一節我都用輔助欄把規則的公式寫進儲存格,TRUE 就是會被標色,這樣不用靠眼睛猜。
先用兩個小規則,分清公式與格式
延伸閱讀:方格子上的自訂公式舊文。先另開一張空白表,把下方資料貼到 A1,最後一列 A5:B5 留空:
數值 文字 奇數規則值 字數規則值
5 ABCDE
8 ABCDEF
文字 你好在 C2 放第一條,再往下填到 C5:
先看是否為數值,奇數才 TRUE,其他或錯誤回 FALSE
=IFERROR(AND(ISNUMBER(A2),ISODD(A2)),FALSE)D2 放第二條,再往下填到 D5:
字數嚴格大於五才符合
=LEN(B2)>5| 資料列 | 奇數規則 | 字數規則 |
|---|---|---|
| 第 2 列:5/ABCDE | TRUE | FALSE |
| 第 3 列:8/ABCDEF | FALSE | TRUE |
| 第 4 列:文字/你好 | FALSE | FALSE |
| 第 5 列:留空 | FALSE | FALSE |
接著選 A2:A5,在「格式」>「條件式格式設定」選自訂公式,貼上第一條,字型選藍色、底色不變。再對 B2:B5 建立第二條規則,字型選紅色。兩個規則分開設定,各自以套用範圍左上角為基準。這是改變顯示樣式,不是阻止輸入的資料驗證。
建好之後可以改值觀察顏色:A3 從 8 改 7,字會變藍,改回 8 就恢復黑字;B2 從 ABCDE 改 ABCDEF,字會變紅,還原五字後恢復黑字。
這個奇偶練習限定整數;來源若可能含小數,先另外訂好有效值與處理規則。LEN 算字元長度,空格也算;不是畫面寬度或所有語言的字詞數。IFERROR 是明訂「有錯就不標」,不是證明來源沒有問題。
以上兩個小規則放在獨立練習表;接下來回到茶飲目標表,觀察整列標色時的參照。
後面大多用這張茶飲目標表,放在 A1:C6:
| 品項 | 目標 | 實際 |
|---|---|---|
| 蘋果紅茶 | 120 | 97 |
| 蘋果綠茶 | 90 | 112 |
| 青茶 | 60 | 58 |
| 鮮奶茶 | 80 | 80 |
| 冬瓜檸檬 | 70 | 41 |
我想讓「實際低於目標」的整列變色。
公式是以套用範圍的左上角寫的
自訂公式只寫一次,但 Google 試算表會把它當成「寫在套用範圍左上角那一格」,再往右往下平移到其他格子。套用範圍 A2:C6,左上角就是 A2,所以公式要寫第 2 列的版本:
套用範圍 A2:C6,實際低於目標就標色
=$C2<$B2圖:欄鎖死、列跟著走,同一列的 A、B、C 三格得到同一個判斷,整列一起變色。
每一列的判斷結果:
| 列 | 品項 | 判斷 |
|---|---|---|
| 2 | 蘋果紅茶 | TRUE |
| 3 | 蘋果綠茶 | FALSE |
| 4 | 青茶 | TRUE |
| 5 | 鮮奶茶 | FALSE |
| 6 | 冬瓜檸檬 | TRUE |
鮮奶茶剛好 80 對 80,小於不成立,所以不標。要含等於的話,改成 <=。
三種 $ 放錯的長相
列號寫成別列
套用範圍從 A2 開始,卻把公式寫成 ,每一格都會去看下面那一列。
| 列 | 品項 | 判斷 |
|---|---|---|
| 2 | 蘋果紅茶 | FALSE |
| 3 | 蘋果綠茶 | TRUE |
| 4 | 青茶 | FALSE |
| 5 | 鮮奶茶 | TRUE |
| 6 | 冬瓜檸檬 | FALSE |
整排跟正確答案剛好相反,看起來像顏色「差一列」。最常發生在套用範圍包含標題列(從 A1 開始)的時候:公式就得寫第 1 列的版本。我自己的習慣是先看側邊欄的套用範圍左上角是哪一格,再決定公式裡的列號。
欄號沒鎖
寫成 ,沒有 $。套用範圍 A2:C6 裡,A 欄的格子用 C2<B2,往右一欄的 B 欄會平移成 D2<C2,C 欄是 E2<D2。
| 列 | A 欄 | B 欄 | C 欄 |
|---|---|---|---|
| 2 | TRUE | TRUE | FALSE |
| 3 | FALSE | TRUE | FALSE |
| 4 | TRUE | TRUE | FALSE |
| 5 | FALSE | TRUE | FALSE |
| 6 | TRUE | TRUE | FALSE |
A 欄剛好是對的,B 欄全部標色(D 欄是空白,空白被當 0,0 小於 97 成立),C 欄一個都不標(E、D 都空白,0 小於 0 不成立)。畫面上就是整排「目標」欄變色、「實際」欄不變,很怪。
全部鎖死
寫成 ,每一格都只看第 2 列,97 小於 120 成立,整個範圍 5 列全部都是 TRUE,全表一起變色。
$ 放在欄號前鎖欄,放在列號前鎖列,這在 參照的藝術 有圖說明。條件式格式的規則是:整列標色,欄鎖死、列不鎖。
橫向的表要鎖列
如果資料是橫著擺的,目標在第 1 列、每週的實際往下擺,要鎖的就是列。表格放在 A1:E3,B 到 E 是四個品項:
| 列 | B | C | D | E |
|---|---|---|---|---|
| 1(目標) | 120 | 90 | 60 | 80 |
| 2(第 1 週) | 97 | 112 | 58 | 80 |
| 3(第 2 週) | 130 | 85 | 61 | 79 |
套用範圍 B2:E3,要讓實際低於同欄的目標變色,公式是:
橫向表:每格跟自己欄最上面的目標比
=B2<B$1這邊 B$1 的列號鎖住,每一格都往第 1 列找目標,欄號不鎖,往右走就看 C、D、E。結果:
| 列 | B | C | D | E |
|---|---|---|---|---|
| 2 | TRUE | FALSE | TRUE | FALSE |
| 3 | FALSE | TRUE | FALSE | TRUE |
四種寫法放一起看:
| 寫法 | 欄 | 列 | 用在 |
|---|---|---|---|
$C2 | 鎖 | 跟著走 | 整列標色 |
C$2 | 跟著走 | 鎖 | 橫向表、整欄標色 |
$C$2 | 鎖 | 鎖 | 一個固定的目標格 |
C2 | 跟著走 | 跟著走 | 每格只看自己,例如單格比較 |
跨工作表參照要用 INDIRECT
我想讓「下架」工作表 A 欄列出的品項,在目前這張表的 A 欄標色。直覺的寫法是:
直接參照另一個工作表
=COUNTIF(下架!A2:A, $A2)>0條件式格式的規則不接受直接參照別張工作表,這條公式存不下來,側邊欄會顯示錯誤。要繞過去,把範圍包進 INDIRECT,用文字描述位置:
用 INDIRECT 讀另一個工作表的清單
=COUNTIF(INDIRECT("下架!A2:A"), $A2)>0INDIRECT 吃一段文字,把它當成範圍。因為是文字,工作表名稱有空格或特殊符號時,要在文字裡把名稱用單引號包起來,像 INDIRECT("'下架 清單'!A2:A")。
同樣的,$A2 還是寫套用範圍左上角的版本。
為了好驗證,下面把清單放在同一張表,跨表時只要把 H2:H 換成 下架!A2:A。我把下架清單放在 H2:H3(青茶、烏龍茶),A2:A6 是蘋果紅茶、青茶、鮮奶茶、冬瓜檸檬、烏龍茶, 的判斷結果:
| 列 | 品項 | 判斷 |
|---|---|---|
| 2 | 蘋果紅茶 | FALSE |
| 3 | 青茶 | TRUE |
| 4 | 鮮奶茶 | FALSE |
| 5 | 冬瓜檸檬 | FALSE |
| 6 | 烏龍茶 | TRUE |
文字寫的範圍不會跟著你插入或刪除列而調整,這是 INDIRECT 的通性,細節在 動態參照的謹慎使用指南。如果清單常常動,我會改成在本表隱藏欄用公式把清單帶過來,規則就只參照本表。
公式回傳錯誤時,規則不會套用
另一張表,目標有 0 和空白:
| 品項 | 目標 | 實際 |
|---|---|---|
| 蘋果紅茶 | 120 | 97 |
| 青茶 | 0 | 5 |
| 鮮奶茶 | 12 | |
| 冬瓜檸檬 | 70 | 41 |
想標出達成率低於 80% 的品項,規則寫 。判斷結果:
| 列 | 品項 | 判斷 |
|---|---|---|
| 2 | 蘋果紅茶 | FALSE |
| 3 | 青茶 | #DIV/0! |
| 4 | 鮮奶茶 | #DIV/0! |
| 5 | 冬瓜檸檬 | TRUE |
蘋果紅茶是 97 / 120 約 0.808,不低於 0.8,所以不標。青茶和鮮奶茶的分母是 0,公式回 #DIV/0!。預期的行為是規則公式回傳錯誤時不套用格式,也不會跳任何提醒,結果這兩列永遠不會標色。表面看起來像「沒問題」,其實是漏掉了。
要看你想怎麼處理這兩列,有兩種寫法:
錯誤也當作需要注意,標色
=IFERROR($C2/$B2<0.8, TRUE)分母不大於 0 就不標,其他才比
=IF($B2>0, $C2/$B2<0.8, FALSE)第一個版本會把三列(青茶、鮮奶茶、冬瓜檸檬)全標;第二個版本只標冬瓜檸檬。我個人偏好第一種,因為目標是 0 或沒填,本身就值得看一眼。
有人會想用 AND($B2>0, $C2/$B2<0.8),但 AND 不會跳過後面的條件,兩個參數都會算,分母是 0 時一樣回 #DIV/0!。要避開除以 0,用 IF。
日期比較被時間吃掉
到期欄如果是「日期加時間」,像 2026/10/11 09:00,它是 46306.375 這種帶小數的數字,而 TODAY() 只是當天 0 點。假設今天是 2026/10/11,到期欄是這四筆:
| 到期時間 | 等於今天 | INT 後等於今天 | 小於等於今天 | INT 後小於等於今天 |
|---|---|---|---|---|
| 2026/10/10 23:00 | FALSE | FALSE | TRUE | TRUE |
| 2026/10/11 09:00 | FALSE | TRUE | FALSE | TRUE |
| 2026/10/11 18:30 | FALSE | TRUE | FALSE | TRUE |
| 2026/10/12 08:00 | FALSE | FALSE | FALSE | FALSE |
四欄的公式依序是 、、、。INT 把小數的時間部分砍掉,只剩日期,這樣「今天到期」才會成立。想要「今天以前到期」,用 。
另一種情況是到期日是文字,靠左對齊,看起來像日期。文字拿來跟日期比大小,結果永遠是文字比較大,所以 不管寫什麼日期都是 FALSE。這些日期如果是 2026/10/05 的文字,結果是(要做出文字日期,先把儲存格格式設成「純文字」再輸入,或在日期前面加一個單引號 ',否則 Sheets 會自動把它轉成真正的日期):
| 到期日(文字) | $B2<TODAY() | DATEVALUE($B2)<TODAY() |
|---|---|---|
| 2026/10/05 | FALSE | TRUE |
| 2026/10/20 | FALSE | FALSE |
先用 DATEVALUE 把文字轉成日期再比,才會對。文字日期的辨認和轉換在 日期與時間入門 有說,條件式格式只是會讓你更快發現這個問題。
找出錯在哪
茶飲目標表(A1:C6)的套用範圍是 A2:C6,想在「實際低於目標」時整列變色,卻把公式寫成 ,結果 A 欄、B 欄、C 欄各是什麼樣子?請寫出改正後的公式。
這題的原因在「三種 $ 放錯的長相」那節:A 欄剛好對,B 欄全標,C 欄全不標。自訂公式寫完,我都會先開一欄輔助欄貼同樣的公式,TRUE 的列才是之後會變色的列。
這個步驟如果每週都要重做
- 現在
- 每天打開目標表,靠顏色找出低於目標的品項,再逐一通知負責人
- 自動化後
- 每天自動找出實際低於目標的品項,把清單寄給負責的人
接下來可以
相關文章
查看所有文章留言討論
共 0 則留言
