在 Google Sheet 好好調整數字格式!



前言

  • 不時在使用 Google Sheet 時,會需要針對數字的資料做美化,例如貨幣、或公斤、公升等資料,如果能顯示單位,又不影響數字的計算,會很方便。
  • Google Sheet 提供了數字格式化的方式,可以針對不同的數字進行不同的格式化。以下紀錄之前整理美金資料時的做法。

效果像是這樣



結論

先寫結論:

包含小數的美元數字格式化

1
_([$USD]* #,##0.00_);_([$USD]* \(#,##0.00\);_([$USD]* "-"??.00_);_(@_)

不包含小數的美元數字格式化

1
_([$USD]* #,##0_);_([$USD]* \(#,##0\);_([$USD]* "-"??_);_(@_)

USD 換成 TWD 就可以顯示台幣。


四種顯示

這個數字格式實際上分成四個部分,由分號分隔:

[POSITIVE];[NEGATIVE];[ZERO];[TEXT]

也就是說

  • _([$USD]* #,##0.00_) → 正數的格式
  • _([$USD]* \(#,##0.00\) → 負數的格式
  • _([$USD]* "-"??.00_) → 值為零的格式
  • _(@_) → 一般文字的格式

Note

  • 財務上負數都會用括號顯示,例如 -123 元,就會變成 (123) 元。
  • 負數格式中的 \(,代表要加入「一個左括號」、而 \) 則是加入「一個右括號」。
    如果沒有加上 \,程式會無法理解你的意圖,會認為你的括號沒有正確輸入。

深入理解符號

乍看之下很難懂,但是拆開了解符號的意思之後就會清楚許多。

以下我們分成幾個部分說明:

_([$USD]* #,##0.00_)
└┴────────────────┴┴───  1. 左右的空格
  └┴┴┴┴┴───────────────  2. 貨幣符號
        └┴─────────────  3. 補滿空白
          └┴┴┴┴┴┴┴─────  4. 數字顯示的格式
以及                      
                         5. ?? 的意思
                         6. @ 的意思

預留左右的空格

  • _(: 代表要顯示一個「跟這個左括號一樣寬」的空白

原文對於 _ 的說明 [1] :

Adds a space equal in width to the following character.

差別是這樣,例如我們輸入 123 (美金):

┌─────────────┐
│USD   123.00 │       [$USD]* #,##0.00_)
├─────────────┤
│ USD  123.00 │       _([$USD]* #,##0.00_)
└─────────────┘
 │
 └─ 會預留一個空格,方便閱讀

  • _): 同樣地,代表要顯示一個「跟這個右括號一樣寬」的空白

所以對於一個正數,目前是 _([$USD]* #,##0.00_),我們先忽略中間的部分,只看前後的 _(_)

_(<先忽略>_)

代表左右都預留一個括號寬度的空格,這樣可以方便我們對齊數字。

差別像是這樣:

┌─────────────┐
│USD    123.00│         [$USD]* #,##0.00
├─────────────┤
│ USD  123.00 │         _([$USD]* #,##0.00_)
└─────────────┘

「正數」的右側之所以要留一個空格,是為了跟負數的括號顯示對齊。

例如說我們上下兩個格子剛好是 123 以及 -123

如果只有留左側,就會像這樣:

┌─────────────┐
│ USD   123.00│         _([$USD]* #,##0.00
├─────────────┤
│ USD (123.00)|         _([$USD]* \(#,##0.00\)
└─────────────┘

當欄位數字變多的時候,數字就沒對齊、不好看:

                      以下都是 
                          正數:_([$USD]* #,##0.00
                          負數:_([$USD]* \(#,##0.00\)
┌─────────────┐
│ USD   123.01│         
├─────────────┤
│ USD  (99.01)|         
├─────────────┤
│ USD    10.56│          
├─────────────┤
│ USD  (12.87)|         
└─────────────┘

當我們指定正數必須預留右側的空格、而負數不用時,就會變成這樣

                      以下都是 
                          正數:_([$USD]* #,##0.00_)
                          負數:_([$USD]* \(#,##0.00\)
┌─────────────┐
│ USD  123.01 │         
├─────────────┤
│ USD  (99.01)|         
├─────────────┤
│ USD   10.56 │          
├─────────────┤
│ USD  (12.87)|         
└─────────────┘

是不是清楚許多!


貨幣還是文字?

  • [$USD]: 代表要顯示美元貨幣符號

如果你在台灣,可以改成使用 "USD" 來代替 [$USD],效果是一樣的。

最主要的差別在於,「貨幣」的寫法,會依據你在不同的地區 (locale) 而有不同的顯示。

例如:

  • 假如我們寫 "USD"
┌─────────────┐
│ USD  123.01 │      在台灣看起來會是這樣     
├─────────────┤ 
│ USD  123.01 │      在美國會看到這樣
└─────────────┘
  • 而如果我們寫 [$USD]
┌─────────────┐
│ USD  123.01 │      在台灣看起來會是這樣     
├─────────────┤ 
│ $    123.01 │      在美國會看到這樣
└─────────────┘

用貨幣的寫法,可以讓同一份表單在不同的地區,看到不同的貨幣符號

所以建議針對貨幣,還是使用貨幣的寫法。


填滿中間的空白

  • * : (注意後面跟著一個空白) 代表要填滿中間的空白

原文對於 * 的說明 [1]:

Repeats the following character to fill in the remaining space in the cell.

所以我們寫 * 的意思是:「用後面『這個空白格』填滿中間的空白」。

比較有沒有使用 * 的差別:

┌─────────────┐
│ USD  123.01 │      _([$USD]* #,##0.00_)
├─────────────┤ 
│   USD123.01 │      _([$USD]#,##0.00_)
└─────────────┘

為了美觀跟對齊數字,自然是一定要加上去的。


Note

  1. 雖然原文是寫用後面的符號填滿中間的空白,但是測試了其他的符號,例如 *=*k,效果都跟空白鍵完全相同。問題不大,我也想不到需要使用空白鍵以外符號的情境。

數字格式 (上) 整數部分

數字的顯示格式可能是目前最複雜的部分。

目前我們一直看到 #,##0.00,卻還沒說明是什麼意思,先看這兩個:

  • #:數字位:如果有數字則顯示,沒有則不顯示
  • 0:數字位:如果沒有數字,則顯示 0

如果覺得太抽象,我們來看幾個例子 (為了美觀,我們都還是保留右側的空格 _)):

                       假設輸入的數字是 2
┌─────────────┐
│           2 │         ##_)
├─────────────┤ 
│          02 │         0#_)
└─────────────┘


                       假設輸入的數字是 22
┌─────────────┐
│          22 │         ##_)
├─────────────┤ 
│          22 │         0#_)
└─────────────┘

可以看到在資料只有個位數,由於我們在第二個格式有指定 0,所以會在十位數補上 0;

當資料有兩個位數,就直接顯示。

反過來說,如果把零放在後面,像這樣:

                       假設輸入的數字是 2
┌─────────────┐
│         002 │         #000_)
└─────────────┘ 


                       假設輸入的數字是 22
┌─────────────┐
│         022 │         #000_)
└─────────────┘ 


                       假設輸入的數字是 222
┌─────────────┐
│         222 │         #000_)
└─────────────┘ 


                       假設輸入的數字是 2222
┌─────────────┐
│        2222 │         #000_)
└─────────────┘ 

可以看到千位數是 #,所以沒有數字也不會顯示出來;

而百位數以下都有 0,所以即使沒有數字,也會顯示 0。


  • ,:千位分隔符號

如果我們在這些符號裡面插入一個 ,,就會有千位分隔符的效果,而且逗號只要在數字間 (不要放在頭尾),效果都是一樣的,並且也只限定千位分隔。

原文對於 , 的說明 [1]:

Formats numbers with a thousands separator.

所以即使 , 不是放在正確的位置,效果是一樣的:

                       假設輸入的數字是 2222
┌─────────────┐
│        2222 │         ##0_)
├─────────────┤
│       2,222 │         ##,0_)
└─────────────┘ 

就算你亂寫一通,放了兩個逗號,效果仍然一樣

                       假設輸入的數字是 222
┌─────────────┐
│     000,222 │         00,0,000_)
└─────────────┘ 

                       效果等同於 
                        000,000_)

相信現在我們已經可以理解一開始的 #,##0 了。


數字格式 (下) - 小數部分

小數點 . 可以更複雜一些:

  • 不同國家的小數點符號有可能不同,例如阿拉伯國家使用逗號。
  • 所以使用小數點的符號也會依據 locale 而有所不同。
  • 小數點可以多個,如果像上面這樣亂寫一通,真的會跑出好幾個點 .

亂寫一通的例子:

                   格子輸入的數字是 0
┌─────────────┐
│ ..0.0.0.0.0 │     ###.#.0.0.0.0.0_)
└─────────────┘         │
                        │
                        └ 我們輸入的 0 會放在這個位置,因為是 # 所以不顯示

不過為了簡單理解,我們就只放一個小數點。

現在再看我們一開始的 #,##0.00 是不是有熟悉了一點?

0.00 的意思是:

  • 0:數字位:如果沒有數字,則顯示 0
  • .:小數點

這邊會寫 0 而不是 #,是因為如果沒有數字,仍然要補 0 才符合一般的人的閱讀習慣。

如果不是 0 而是 #,代表如果沒有數字存在的時候,就不顯示,於是會類似這樣:

                   格子輸入的數字是 0
┌─────────────┐
│           . │     ###.#_)
└─────────────┘


                   格子輸入的數字是 1
┌─────────────┐
│          1. │     ###.#_)
└─────────────┘

這樣看下來,寫成 #,##0.00_) 是不是合理多了?

                   格子輸入的數字是 0
┌─────────────┐
│        0.00 │     #,##0.00_)
└─────────────┘


                   格子輸入的數字是 1
┌─────────────┐
│        1.00 │     #,##0.00_)
└─────────────┘

最後 ?@

還記得一開始結論是

_([$USD]* #,##0.00_);_([$USD]* \(#,##0.00\);_([$USD]* "-"??.00_);_(@_)


對應的格式是
[POSITIVE];[NEGATIVE];[ZERO];[TEXT]

於是輸入數字 0 的時候,對應套用的規則是 ([$USD]* "-"??.00_)

因為財務上習慣將 0 顯示為 -,所以可以發現小數點 . 的前面,沒有任何的 #0

代表當資料為 0 的時候,格子內不顯示數字。

? 代表:

  • ?:數字位:如果沒有數字,則顯示一個空格

相對於前面的 # 以及 0,不是顯示 0 就是不顯示,這邊反而使用 ? 來顯示空格。

這是因為打算要把 - 對齊在百位數,不加上也可以:

                   格子輸入的數字是 0
┌─────────────┐
│      -  .00 │     "-"??.00_)
└─────────────┘


                   格子輸入的數字是 0
┌─────────────┐
│        -.00 │     "-".00_)
└─────────────┘

一般會計格式都會帶上兩個問號 "-"??,我不確定是否有相關規範;

不過我覺得稍微把 - 往左邊移動一點,的確是會比較清楚。

如果你不想要有這個間隔,可以放心地刪掉 ?


最後是我們的文字部分 @,現在看到 _(@_) 是不是覺得簡單多了?

  • @:顯示輸入的文字

原文對於 @ 的說明 [1]:

Displays text entered into a cell.

這個差別就相當單純:這個格子要不要顯示一般的文字

                   格子輸入的內容是 abc
┌─────────────┐
│ abc         │     _(@_)
└─────────────┘


                   格子輸入的內容是 abc
┌─────────────┐
│             │     _(_)
└─────────────┘

等於有一個選項讓你決定文字要如何處理。


Note

  1. _(@_):左右都個留了一個空格,如果你不在乎文字的留白,可以只寫 @
  2. 預設文字都是靠左對齊,所以上面的 abc 會在最左邊。這邊要調整需要自行設定格子的對齊方式。

補充

再看一次結論的內容

1
2
3
_([$USD]* #,##0.00_);_([$USD]* \(#,##0.00\);_([$USD]* "-"??.00_);_(@_)

_([$USD]* #,##0_);_([$USD]* \(#,##0\);_([$USD]* "-"??_);_(@_)

看起來應該親切多了吧?

最後補充一件事,一開始提到

  • _( 的意思是在後面留一個跟 ( 一樣寬的空格

所以實際上你的格式可以不用管左、右括號,只是要預留對應的空格而已,所以可以寫成

  • \):在後面留一個跟 ) 一樣寬的空格
  • \[:在前面留一個跟 [ 一樣寬的空格
  • \}:在前面留一個跟 } 一樣寬的空格

像這些的結果都會相同:

┌─────────────┐
│ USD  123.00 │       \)[$USD]* #,##0.00_(
├─────────────┤
│ USD  123.00 │       _([$USD]* #,##0.00_(
├─────────────┤
│ USD  123.00 │       _[[$USD]* #,##0.00_[
├─────────────┤
│ USD  123.00 │       _{[$USD]* #,##0.00_{
└─────────────┘

只是有對應的左、右括號,看起來還是比較好讀一些。




REF

  1. https://support.google.com/docs/answer/56470#zippy=%2Ccustom-number-formatting
  2. https://zh.wikipedia.org/zh-tw/%E6%96%B9%E6%A1%86%E7%BB%98%E5%88%B6%E5%AD%97%E7%AC%A6
Licensed under CC BY-NC-SA 4.0
最後更新 2025-05-09 06:36

主題 StackJimmy 設計