前言
- 不時在使用 Google Sheet 時,會需要針對數字的資料做美化,例如貨幣、或公斤、公升等資料,如果能顯示單位,又不影響數字的計算,會很方便。
- Google Sheet 提供了數字格式化的方式,可以針對不同的數字進行不同的格式化。以下紀錄之前整理美金資料時的做法。
效果像是這樣
結論
先寫結論:
包含小數的美元數字格式化
|
|
不包含小數的美元數字格式化
|
|
把 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
- 雖然原文是寫用後面的符號填滿中間的空白,但是測試了其他的符號,例如
*=
、*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
_(@_)
:左右都個留了一個空格,如果你不在乎文字的留白,可以只寫@
- 預設文字都是靠左對齊,所以上面的
abc
會在最左邊。這邊要調整需要自行設定格子的對齊方式。
補充
再看一次結論的內容
|
|
看起來應該親切多了吧?
最後補充一件事,一開始提到
_(
的意思是在後面留一個跟(
一樣寬的空格
所以實際上你的格式可以不用管左、右括號,只是要預留對應的空格而已,所以可以寫成
\)
:在後面留一個跟)
一樣寬的空格\[
:在前面留一個跟[
一樣寬的空格\}
:在前面留一個跟}
一樣寬的空格- …
像這些的結果都會相同:
┌─────────────┐
│ USD 123.00 │ \)[$USD]* #,##0.00_(
├─────────────┤
│ USD 123.00 │ _([$USD]* #,##0.00_(
├─────────────┤
│ USD 123.00 │ _[[$USD]* #,##0.00_[
├─────────────┤
│ USD 123.00 │ _{[$USD]* #,##0.00_{
└─────────────┘
只是有對應的左、右括號,看起來還是比較好讀一些。