跳到主要內容跳到頁尾

TEXT 格式碼進階陷阱:mm 變月份、負數不見負號與地區設定

9 分鐘閱讀Lv.3 中級摘要與日期

整理 TEXT 格式碼容易踩到的細節:mm 什麼時候是月份、什麼時候是分鐘,正數、負數、零、文字四段式,用 [>=1000] 加條件,用 0, 把金額縮成 K 和 M,地區設定對小數點和星期字樣的影響,以及 TEXT 的結果其實是文字,比對、加總、排序會出什麼狀況。

發布 更新

文章目錄

我想用 TEXT 把時間組成「14 時 05 分」,小時是對的,分鐘那裡卻跑出一個 10,明明 A2 的時間是 14:05。

這篇整理 TEXT 格式碼容易踩到的細節,像是 mm 的雙重身分、負數的負號、[>=1000] 這種條件、地區設定。TEXT 的語法和 0、#、yyyy/mm/dd 這些基本格式碼,在 TEXT 函式入門 講過了,這邊直接從會出事的地方開始。

mm 有時是月份,有時是分鐘

A2 放著 2026/10/03 14:05,我用兩個 TEXT 分別取小時和分鐘:

Google 試算表公式
fx

小時和分鐘各用一個 TEXT 取

=TEXT(A2,"hh")&"時"&TEXT(A2,"mm")&"分"

來看看結果,顯示的是 14時10分。

分鐘變成 10,那是 10 月的 10。

原因是 mm 同時代表月份和分鐘,試算表看它的位置決定。mm 緊接在 h 或 hh 後面,或是緊接在 s 或 ss 前面,才會被當成分鐘,其他地方一律是月份。我把 mm 單獨拆成一個 TEXT,它前後都沒有 hh,就只能是月份了。

修法是把小時和分鐘放進同一個格式碼:

公式顯示結果
14:05
05:00
10

第一條的 mm 在 hh 後面,第二條的 mm 在 ss 前面,所以都是分鐘;第三條單獨一個,就是月份。

如果想要中文的「時」「分」,可以用雙引號把字夾在格式碼中間。公式本身已經在雙引號裡,所以格式碼裡的雙引號要寫兩次:

Google 試算表公式
fx

在格式碼裡用雙引號夾中文字,hh 和 mm 在同一個格式碼裡

=TEXT(A2,"hh""時""mm""分""")

得到 14時05分。引號寫兩次很容易眼花,我個人比較常用另一個做法,分鐘直接問 MINUTE,再補成兩位數:

Google 試算表公式
fx

用 MINUTE 取分鐘,再用 TEXT 補成兩位數

=TEXT(A2,"hh")&"時"&TEXT(MINUTE(A2),"00")&"分"

同樣是 14時05分。MINUTE(A2) 回傳的是數字 5,不再有月份或分鐘的問題,只剩補零。

如果 TEXT 的第一個參數只有時間、沒有日期,單獨一個 mm 一樣當月份。時間在試算表裡是 0 到 1 之間的小數,日期部分是 0,也就是 1899/12/30,所以 會得到 12,不是 05。

超過 24 小時

再來一個跟時間有關的。假設有三天的工時,B2:B4 分別是 8:30、9:45、7:15,加起來 25.5 小時。直接用 hh:mm 顯示總和:

公式顯示結果
01:30
25:30
1530

hh:mm 把超過 24 小時的部分當成第二天,只剩 01:30。方括號代表累計,[h] 是累計的小時,[mm] 是累計的分鐘。[h] 和 [mm] 這種寫法,表示「經過了多久」,算工時、算通話時間都會用到。1530 這個數字可以手算:25.5 × 60 = 1530。

正數、負數、零和文字:用分號隔開

格式碼可以用分號分成最多四段,依序是正數、負數、零、文字。只寫一段,所有數字都套同一個格式,寫了多段才會分開處理。

我拿一週的庫存變化來做,五個品項的變化量是 37、-112、0、8、-5:

品項庫存變化
蘋果紅茶37
蘋果綠茶-112
青茶0
鮮奶茶8
冬瓜檸檬-5

我想要正數前面加 +、負數維持 -、零顯示「持平」。原始庫存變化保留在 B2:B6,以下公式輸入空白的 C2:

Google 試算表公式
fx

三段式:正數 ; 負數 ; 零

=TEXT(B2,"+#,##0;-#,##0;""持平""")
  • 第一段 +#,##0:正數,加上 + 號與千分位。
  • 第二段 -#,##0:負數,負號要自己寫。
  • 第三段 "持平":零顯示的字,一樣要用兩次雙引號。

將 C2 往下複製到 C6,輸出放在 C2:C6,保留 B 欄的原始數字。結果如下:

品項結果
蘋果紅茶+37
蘋果綠茶-112
青茶持平
鮮奶茶+8
冬瓜檸檬-5

第二段的負號是我最容易漏的。只要寫了負數那一段,試算表就不會再自動幫你補 -,格式裡寫什麼就顯示什麼。把第二段寫成 #,##0,蘋果綠茶會顯示成 112,看起來像進貨了 112 杯。

公式顯示結果
112
(112)

第一條的負數段沒寫 -,符號就不見了;第二條是會計常見的括號寫法。

這個特性也可以拿來用。第二段不寫 -,改成用文字表達方向,數字永遠是正的:

Google 試算表公式
fx

負數段用文字表示方向,不用負號

=TEXT(B3,"""多 ""0;""少 ""0;""持平""")

B3 是 -112,得到「少 112」。

第四段:文字

第四段用 @ 代表「儲存格裡的文字」,輸入是文字時才會套用第四段。四段全部寫出來長這樣:

Google 試算表公式
fx

正數、負數、零、文字四段

=TEXT(A2,"0.0;-0.0;""零"";""文字:""@")

A2 到 A5 分別放 3.14159、-2、0 和文字「缺貨」,結果是:

輸入結果
3.141593.1
-2-2.0
0零
缺貨文字:缺貨

我自己很少寫到第四段,因為資料裡混著文字的時候,我通常會先處理掉,不會塞在格式碼裡。知道它存在,看到別人的格式碼多出一個 @ 時不會嚇到就夠了。

金額縮寫:0, 與 [>=1000]

報表裡的金額太長,我想縮成「1.2M」「48.3K」。分成兩個工具:逗號負責縮小,方括號負責選擇。

結尾的逗號是除以 1000

格式碼的數字位數後面接一個逗號,代表除以 1000,兩個逗號除以 1,000,000。拿 1234567 來看:

公式顯示結果
1235
1,235
1.2
1.2M

第一條除以 1000 得 1234.567,四捨五入成 1235;第二條縮小之後再加千分位;第三條兩個逗號,除以一百萬;第四條把單位接在後面。

逗號的位置很重要。0,0 這樣逗號在數字中間,是千分位,不會縮小;要縮小,逗號得在最後一個位數符號的後面。

單位我習慣用 & 接在 TEXT 外面,不放進格式碼。因為 M、d、y、h、s 這幾個字母本身是格式碼,放進格式碼卻沒有加引號,試算表會把它們當成月份、日、年來解讀。一定要放進去,就像前面那樣用兩次雙引號夾起來:"0.0,,""M""",結果也是 1.2M。

縮小的代價是不精確。912 套 "0,":

公式顯示結果
1

0.912 四捨五入成 1,912 變成「1」,單位還是千,看起來就是 1000。所以小數字要不要縮、縮到哪一位,得自己決定,這個決定就是下一段的條件。

方括號放條件

方括號裡可以寫條件,讓不同大小的數字走不同的格式:

Google 試算表公式
fx

一百萬以上顯示 M,一千以上顯示 K,其他照原數字

=TEXT(A2,"[>=1000000]0.0,,""M"";[>=1000]0.0,""K"";0")
  • [>=1000000]0.0,,""M"":大於等於一百萬,除以一百萬,後面加 M。
  • [>=1000]0.0,""K"":大於等於一千,除以一千,後面加 K。
  • 0:都不符合的,原樣顯示。

最多兩段條件,再加上最後一段「其他」。A2 到 A5 放 1234567、48310、4820、912,來看看結果:

輸入結果
12345671.2M
4831048.3K
48204.8K
912912

手算確認:48310 ÷ 1000 = 48.31,留一位小數是 48.3;4820 ÷ 1000 = 4.82,留一位是 4.8。

這個公式我只拿來處理正數。負數會落在最後一段,要縮寫的話,我會另外用 IF 先判斷正負,再各自處理。

地區設定會改什麼

同一條 TEXT,換一個試算表,結果可能不一樣。Google 試算表的地區設定是跟著檔案走的,路徑是「檔案」>「設定」,裡面的「語言代碼」。同事用別的語言代碼建了檔案,你把公式複製過去,就可能碰到。以下是會跟著變的東西:

  • 小數點與千分位:地區是台灣或美國,格式碼寫 #,##0.00;語言代碼換成小數點是逗號的國家(例如德國),小數點會變逗號,格式碼要寫成那邊的版本。
  • 星期和月份的字樣:dddd、ddd、mmmm 會跟著地區變,地區設定是台灣時是中文(例如星期六的 dddd 是「星期六」、ddd 是「週六」,mmmm 是「10月」),其他地區可能是英文或別的語言。
  • 公式的參數分隔符號:小數點是逗號的地區,公式用分號隔開參數,。

最麻煩的是第一項。格式碼是寫在字串裡的,換了地區之後,公式不會報錯,只會悄悄地顯示成另一個樣子。

我的做法是,要共用到不同地區的檔案,就別讓結果依賴地區:星期用 TEXT 實戰 裡的 MID 搭配 WEEKDAY,金額和日期的外觀,優先用儲存格本身的數字格式,不要全部包進 TEXT。

TEXT 的結果,看起來是數字,其實是文字

入門篇講過 SUM 會略過文字。這邊補另外幾個更容易被忽略的狀況,一樣是 TEXT 的結果。

B2:B5 放著單號 9、10、112、8,C 欄用 轉成文字,看起來沒有什麼不同。

公式顯示結果
FALSE
10
0

文字的 9 跟數字的 9 不相等;加法會自動把文字轉成數字;MAX 則把範圍裡的文字略過。三個結果不一致:= 比對不相等,+ 卻算得出來,MAX 又當它不存在。同一欄資料,不同函式的反應不一樣,最容易讓人困惑。所以只要看到「公式看起來沒問題,但就是比對不到」,我第一個懷疑的就是某一邊是 TEXT 做出來的。

排序也會受影響。把 C2:C5 交給 SORT,公式放在 E2:

Google 試算表公式
fx

對文字的數字排序

=SORT(C2:C5)
列E 欄
210
3112
48
59

文字是一個字一個字比的,"10" 第一個字是 1,排在 "8" 前面。補零(例如 "000")的編號沒有這個問題:位數都一樣,文字排序和數字排序的順序就會一致,TEXT 實戰 的收據編號就是這樣用的。

修法有兩個,看你的需求:

  • 排序、比對、加總用的欄位,一律用原本的數字欄,TEXT 那一欄只留給畫面。
  • 一定要從文字拿回數字,用 VALUE(C2)。不過對補零的文字,比如 "009",轉回來只會是 9,補的零不見了。

練習

1

找出錯在哪

A2 是 2026/10/03 14:05,同事寫了一條公式想顯示 14:05:。結果顯示 14:10。請改成一個 TEXT 就能得到 14:05 的寫法。

2

數量增減的文字

B3 是 -112。請用一條 TEXT,讓正數顯示成「多 數字」、負數顯示成「少 數字」、零顯示成「持平」。B3 要得到「少 112」。

格式碼寫到最後,我覺得最重要的判斷是:這個結果之後還要不要算。要算的,格式留在儲存格上;只是要給人看的字串,再交給 TEXT。

我是喜特先生,Mr. Sheet,我們下個教學見!

分享:
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。