我想用 TEXT 把時間組成「14 時 05 分」,小時是對的,分鐘那裡卻跑出一個 10,明明 A2 的時間是 14:05。
這篇整理 TEXT 格式碼容易踩到的細節,像是 mm 的雙重身分、負數的負號、[>=1000] 這種條件、地區設定。TEXT 的語法和 0、#、yyyy/mm/dd 這些基本格式碼,在 TEXT 函式入門 講過了,這邊直接從會出事的地方開始。
mm 有時是月份,有時是分鐘
A2 放著 2026/10/03 14:05,我用兩個 TEXT 分別取小時和分鐘:
小時和分鐘各用一個 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 前面,所以都是分鐘;第三條單獨一個,就是月份。
如果想要中文的「時」「分」,可以用雙引號把字夾在格式碼中間。公式本身已經在雙引號裡,所以格式碼裡的雙引號要寫兩次:
在格式碼裡用雙引號夾中文字,hh 和 mm 在同一個格式碼裡
=TEXT(A2,"hh""時""mm""分""")得到 14時05分。引號寫兩次很容易眼花,我個人比較常用另一個做法,分鐘直接問 MINUTE,再補成兩位數:
用 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:
三段式:正數 ; 負數 ; 零
=TEXT(B2,"+#,##0;-#,##0;""持平""")- 第一段
+#,##0:正數,加上 + 號與千分位。 - 第二段
-#,##0:負數,負號要自己寫。 - 第三段
"持平":零顯示的字,一樣要用兩次雙引號。
將 C2 往下複製到 C6,輸出放在 C2:C6,保留 B 欄的原始數字。結果如下:
| 品項 | 結果 |
|---|---|
| 蘋果紅茶 | +37 |
| 蘋果綠茶 | -112 |
| 青茶 | 持平 |
| 鮮奶茶 | +8 |
| 冬瓜檸檬 | -5 |
第二段的負號是我最容易漏的。只要寫了負數那一段,試算表就不會再自動幫你補 -,格式裡寫什麼就顯示什麼。把第二段寫成 #,##0,蘋果綠茶會顯示成 112,看起來像進貨了 112 杯。
| 公式 | 顯示結果 |
|---|---|
| 112 | |
| (112) |
第一條的負數段沒寫 -,符號就不見了;第二條是會計常見的括號寫法。
這個特性也可以拿來用。第二段不寫 -,改成用文字表達方向,數字永遠是正的:
負數段用文字表示方向,不用負號
=TEXT(B3,"""多 ""0;""少 ""0;""持平""")B3 是 -112,得到「少 112」。
第四段:文字
第四段用 @ 代表「儲存格裡的文字」,輸入是文字時才會套用第四段。四段全部寫出來長這樣:
正數、負數、零、文字四段
=TEXT(A2,"0.0;-0.0;""零"";""文字:""@")A2 到 A5 分別放 3.14159、-2、0 和文字「缺貨」,結果是:
| 輸入 | 結果 |
|---|---|
| 3.14159 | 3.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。所以小數字要不要縮、縮到哪一位,得自己決定,這個決定就是下一段的條件。
方括號放條件
方括號裡可以寫條件,讓不同大小的數字走不同的格式:
一百萬以上顯示 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,來看看結果:
| 輸入 | 結果 |
|---|---|
| 1234567 | 1.2M |
| 48310 | 48.3K |
| 4820 | 4.8K |
| 912 | 912 |
手算確認: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:
對文字的數字排序
=SORT(C2:C5)| 列 | E 欄 |
|---|---|
| 2 | 10 |
| 3 | 112 |
| 4 | 8 |
| 5 | 9 |
文字是一個字一個字比的,"10" 第一個字是 1,排在 "8" 前面。補零(例如 "000")的編號沒有這個問題:位數都一樣,文字排序和數字排序的順序就會一致,TEXT 實戰 的收據編號就是這樣用的。
修法有兩個,看你的需求:
- 排序、比對、加總用的欄位,一律用原本的數字欄,
TEXT那一欄只留給畫面。 - 一定要從文字拿回數字,用
VALUE(C2)。不過對補零的文字,比如 "009",轉回來只會是 9,補的零不見了。
練習
找出錯在哪
A2 是 2026/10/03 14:05,同事寫了一條公式想顯示 14:05:。結果顯示 14:10。請改成一個 TEXT 就能得到 14:05 的寫法。
數量增減的文字
B3 是 -112。請用一條 TEXT,讓正數顯示成「多 數字」、負數顯示成「少 數字」、零顯示成「持平」。B3 要得到「少 112」。
格式碼寫到最後,我覺得最重要的判斷是:這個結果之後還要不要算。要算的,格式留在儲存格上;只是要給人看的字串,再交給 TEXT。
我是喜特先生,Mr. Sheet,我們下個教學見!
接下來可以
相關文章
查看所有文章留言討論
共 0 則留言
