Excel の表示形式コードを読み解く —

· unvell team
Excel の表示形式コードを読み解く —

セルの値は 1234567。ダッシュボードでは 1.2M、決算資料では「(単位:千円)」の下に 1,235、請求書では ¥1,234,567、そして印刷しようとしているシートでは何も表示されていない。どれも同じ数値です。変わったのは表示形式コードだけです。

表示形式コードは、Excel の [セルの書式設定]→[表示形式]→[ユーザー定義] に入っている文字列です。#,##0、0.0%、yyyy/mm/dd、#,##0;[Red]-#,##0。検索して見つけたものを貼り付けて終わり、という方が多いと思いますが、読めるようになる価値はあります。セクションが 4 つ、桁の記号がいくつか、それに色・条件・引用符の文字列。この言語はほぼそれで全部です。

ReoGrid V5 は Excel と同じ表示形式コードでセルを表示します。Excel からコピーしたコードは C# アプリでそのまま動き、アプリで保存した XLSX は Excel で開いても同じ見え方になります。この記事は、コードの読み方と、コードからの使い方の両方を扱います。


まず覚えておきたいコード

コード値表示意味
01234.5671235整数に丸める
0.001234.5671234.57小数 2 桁
#,##012345671,234,567桁区切り
#,##0.001234.51,234.50桁区切り+小数 2 桁
0% / 0.0%0.123412% / 12.3%パーセント(100 倍する)
¥#,##01234567¥1,234,567通貨記号
#,##0"円"12341,234円単位を付ける
#,##0,12345671,235千円単位
#,##0;[Red]-#,##0-1234赤字で -1,234負数を赤に
#,##0;"▲"#,##0-1234▲1,234負数を ▲ で
000-00001000001100-0001郵便番号の形
;;;何でも(何も出ない)値を隠す
yyyy/mm/dd日付2026/10/31日付
[$-411]ggge"年"m"月"d"日"日付令和8年10月31日和暦
[h]:mm37.5 時間37:3024 時間を超える時間

表のすべての行は ReoGrid V5 で実際に表示を確かめたもので、どれも Excel での表示と同じです。以下では、それぞれがなぜそう表示されるのかを説明します。仕組みがわかれば、表にないコードも自分で書けます。


1 つのコードに 4 つのセクション

#,##0;[Red]-#,##0;"-";@ を正の数・負の数・ゼロ・文字列の 4 つのセクションに分け、それぞれが受け持つ値と表示を示した図

表示形式コードは、セミコロンで区切った最大 4 つのセクションでできています。

正の数 ; 負の数 ; ゼロ ; 文字列

いくつ書くかで、各セクションが受け持つ値が決まります。

書いたセクション受け持ち
1 つ — #,##0すべての数値
2 つ — #,##0;"▲"#,##0正の数とゼロ ; 負の数
3 つ — #,##0;-#,##0;"-"正の数 ; 負の数 ; ゼロ
4 つ — …;…;…;@上の 3 つ+文字列

つまずきの大半は、次の 3 つのルールで説明できます。

  • 負の数のセクションには、マイナス記号が自動では付きません。 2 つ目のセクションを書いた時点で、符号をどこに置くかは書き手に任されます。0;0 では -5 が 5 と表示されます。"▲"#,##0 や (#,##0) が成り立つのはこのためで、▲ や括弧が符号の代わりになります。
  • 空のセクションは何も表示しません。 #,##0;-#,##0;(末尾のセミコロンに注意)はゼロだけを空欄にし、ほかはそのまま表示します。;;; は文字列も含めてすべてを空欄にします。値はセルに残っていて、数式からも読めますし、ファイルにも保存されます。
  • 文字列が届くのは 4 つ目のセクションだけです。 #,##0 を設定したセルに入った文字列は、そのまま表示されます。数値用のセクションは文字列に触れません。文字列として入った数字も同じで、CSV から来た "1234" は数値として格納し直すまでカンマの付かない 1234 のままです。(CSV の列が文字列になる理由と、その制御方法)

桁の記号 — 0・#・?

文字表示例
0常に数字を出す。足りない桁は 0 で埋める0.5 に 0.00 → 0.50、42 に 00000 → 00042
#意味のある桁だけ出す0.5 に #.## → .5、0 に # → (空欄)
?# と同じだが、桁の幅を空白で確保して位置を揃える2.5 に # ?/? → 2 1/2
.小数点
,桁区切り。末尾に置くと 1,000 で割る#,##0 → 1,234,567、#,##0, → 1,235
%100 倍して % を付ける0.15 に 0% → 15%

定番が #,### ではなく #,##0 なのはこのためです。# の部分は先頭のゼロを出さずに桁区切りだけを置き、最後の 0 1 つがゼロを空欄ではなく 0 と表示させます。

先頭のゼロ。 000-0000 を設定すると、数値 1000001 は 100-0001 と郵便番号の形で表示されます。ただしこれは数値の「見え方」です。郵便番号・社員番号・品番のように列の中身が識別子なら、文字列として格納するほうが確実です。ゼロがデータの一部になり、コピーしても、エクスポートしても、CSV にしても残ります。(郵便番号の扱いは郵便番号から住所を補完する記事でも触れています)

パーセントは 100 倍します。 0% は 0.15 を 15% にし、12 を 1200% にします。データが最初からパーセント単位(12 が 12% の意味)なら、0.12 で格納するか、記号を引用符で囲んでただの文字にします。0"%" なら 12 は 12% と表示されます。


千円単位・百万円単位 — 末尾のカンマ

数字の記号の間にあるカンマは桁区切りです。数値部分の末尾にあるカンマは 1,000 で割り、2 つ並べると 100 万で割ります。変わるのは表示だけです。

コード1234567 の表示よくある使い方
#,##0,1,235「(単位:千円)」の資料
#,##0,,1「(単位:百万円)」の資料
#,##0.0,,1.2百万円単位で小数 1 桁
0.0,,"M"1.2Mダッシュボードのタイル

千円単位の表では、見出しや表の右上に「(単位:千円)」と書き、数値のセルには #,##0, を設定するのが定番です。セルの値は円のままなので、合計も前年比も円で正しく計算されます。

大きさに応じて K と M を切り替えるなら、セクションの頭に条件を書きます(条件は次の節で説明します)。

[>=1000000]0.0,,"M";[>=1000]0.0,"K";0

1500     →  1.5K
2500000  →  2.5M
999      →  999

Excel にもある端のケースが 1 つあります。条件が調べるのはセルの値で、丸めはその後に行われます。999999 は 100 万未満なので K のセクションに入り、999.999 を小数 1 桁に丸めて 1000.0K になります。気になる場合は、しきい値を丸めが切り替わる位置にずらします。[>=999950]0.0,,"M";… なら同じ値が 1.0M と表示されます。


色と条件

セクションの頭には 8 つの色を書けます。[Black]・[Blue]・[Cyan]・[Green]・[Magenta]・[Red]・[White]・[Yellow] です。色はそのセクションにだけ効き、セルの文字色より優先されます。

[Blue]+0.0%;[Red]-0.0%;0.0%

 0.034  →  +3.4%   (青)
-0.012  →  -1.2%   (赤)
 0      →  0.0%

ここでの + はただの文字です。コードが書いたものがそのまま出て、負の数のセクションは自分で - を書いています。

決算書でよく見る「負数を赤の ▲ で」も同じ書き方です。

#,##0;[Red]"▲"#,##0      -1234 → ▲1,234(赤)

角括弧の条件を書くと、正・負の振り分けの代わりに、自分で決めた条件でセクションを選べます。条件のないセクションは、残りのすべての値を受け持ちます。

[Red][<60]0;0               45 → 45(赤)、 75 → 75      合格点の判定
[=0]"なし";0" 件"           0 → なし、      3 → 3 件
[>=60]"合格";"不合格"        75 → 合格、     40 → 不合格

最後の例は文字しか表示しませんが、セルには 75 が入ったままです。並べ替えも合計もフィルターも数値として動きます。文字はあくまで見え方です。


文字列・単位・@

二重引用符で囲んだものはそのまま表示されます。0"個" なら 3 は 3個、#,##0"円" なら 1234 は 1,234円 です。1 文字だけならバックスラッシュでも同じことができます。

単位をセルではなく表示形式に書くのには理由があります。セルに 3個 と入力するとそれは文字列になり、SUM は文字列を飛ばします。0"個" を設定した 3 は、見た目に「個」が付いているだけの数値です。

@ はセルの文字列を表し、4 つ目のセクション(または @ を含む最後のセクション)で使います。宛名に敬称を付けるのが日本ではよくある使い方です。

@" 様"            "田中"  →  田中 様

数値の列に紛れ込んだ文字列を目立たせることもできます。

#,##0;-#,##0;0;[Red]@

1234   →  1,234
"未定"  →  未定(赤)

数値はいつもどおりに表示され、誰かが 未定 と入力した 1 セルだけが赤くなります。合計から黙って抜け落ちる前に気づけます。


日付と時刻

セルの日付は数値です。1900 年からの日数を整数部に、その日の時刻を小数部に持っています。どう読ませるかはコードが決めます。

コード2026 年 10 月 31 日 14:05:09 の表示
yyyy/mm/dd2026/10/31
yyyy"年"m"月"d"日"2026年10月31日
m"月"d"日"10月31日
yyyy-mm-dd2026-10-31
mmm d, yyyyOct 31, 2026
ddd / ddddSat / Saturday
h:mm AM/PM2:05 PM
yyyy/mm/dd hh:mm:ss2026/10/31 14:05:09

m は「月」のことも「分」のこともあります。h / hh の直後か ss の直前にあれば分、それ以外は月です。mm:ss は分と秒、mm 単独なら月です。

[h]:mm — 1 日消える勤務表

1 日 7 時間 30 分を 5 日分、合計します。

A1:A5   各 7:30              (1 日の 7.5 / 24、表示形式 h:mm)
A6      =SUM(A1:A5)

        h:mm     →  13:30    24 時を超えて時計が一周した
        [h]:mm   →  37:30    経過時間

h は時計の針の「時」なので、37.5 時間は「1 日と 13:30」と読まれます。角括弧で囲むと一周せずに数え続けます。[h]:mm・[mm]:ss・[ss] の 3 つです。勤務時間の合計には必ず角括弧を付けます。

和暦

[$-411]ggge"年"m"月"d"日" で 2026 年 10 月 31 日は 令和8年10月31日 と表示されます。[$-411]ge.m.d なら R8.10.31 です。元号の表は ReoGrid に内蔵されているので、どのマシンでも同じ文字になります。[$-ja-JP-x-gannen] を付けると、2019 年 5 月 1 日は 令和元年5月1日 と元年表記になります。業務アプリでの使い方は和暦の記事、コードの一覧は数値書式のドキュメントにあります。

曜日の aaa(土)・aaaa(土曜日)は現時点では未対応です(現時点での制限)。曜日を出すなら英語表記の ddd・dddd を使えます。

日付の列には表示形式を設定する

表示形式を設定していない日付セルは、動いているマシンの地域設定の日付形式で表示されます。同じファイルでも、日本の PC と海外の PC では見え方が変わります。日付の列に表示形式を設定しておけば、どこで開いても同じ表示になります。


表示形式は値を変えない

=100/3 を入れた 3 つのセルは #,##0 で 33 と表示されるが、SUM は 100 になる。数式はセルの値で計算する。ROUND で値を丸めると表示どおり 99 になる

3 つのセルに =100/3 が入っています。#,##0 を設定するとどれも 33 と表示され、SUM は 100 を表示します。どこも壊れてはいません。合計はセルの値(33.333… が 3 つ)から計算され、表示形式は画面に出す桁だけを丸めます。丸め方は Excel と同じく四捨五入(0 から遠いほうへ)で、0 を設定した 2.5 は 3、0.00 を設定した 0.125 は 0.13 と表示されます。

ここまでの例もすべて同じです。1,235(千円単位)は数式から見れば 1234567 のままで、;;; で隠した値も合計に入ります。

請求書や税額の行、電卓で検算される表のように、画面の数字どおりに合計が合ってほしいときは、表示ではなく値を丸めます。=ROUND(100/3, 0) なら 33 が格納され、3 つの合計は 99 になります。金額の丸めは「請求書の合計が1円ずれる」を防ぐ記事で ROUND・ROUNDDOWN・ROUNDUP を使って説明しています。


C# から使う — ReoGrid V5

ここから先のコードは WinForms・WPF・Avalonia で共通で、UI のないヘッドレスでもそのまま動きます。

表示形式を設定する

using unvell.ReoGrid.Core;
using unvell.ReoGrid.Core.Data;

var workbook = new Workbook();
var sheet = workbook.AddWorksheet("損益");

sheet.SetText(0, 0, "地域");   sheet.SetText(0, 1, "営業利益");  sheet.SetText(0, 2, "前年比");
sheet.SetText(1, 0, "東日本");  sheet.SetNumber(1, 1, 1234567);  sheet.SetNumber(1, 2, 0.034);
sheet.SetText(2, 0, "西日本");  sheet.SetNumber(2, 1, -45200);   sheet.SetNumber(2, 2, -0.012);
sheet.SetText(3, 0, "九州");    sheet.SetNumber(3, 1, 0);        sheet.SetNumber(3, 2, 0);

sheet.SetNumberFormat(RangePosition.Parse("B2:B4"), "#,##0;[Red]\"▲\"#,##0;\"-\"");
sheet.SetNumberFormat(RangePosition.Parse("C2:C4"), "[Blue]+0.0%;[Red]-0.0%;0.0%");

sheet.GetDisplayText(1, 1);      // "1,234,567"
sheet.GetDisplayText(2, 1);      // "▲45,200"   赤で描画
sheet.GetDisplayText(3, 1);      // "-"
sheet.GetDisplayText(1, 2);      // "+3.4%"     青で描画
sheet.GetValue(1, 1).AsNumber;   // 1234567 — 値そのものは変わらない

コードは C# の文字列なので、コードの中の二重引用符はエスケープします。"-" は \"-\" と書きます。それ以外は Excel に入力する文字列とまったく同じです。

SetNumberFormat(range, …) は指定した範囲のすべてのセルに書き込むので、列全体ではなくデータのある範囲を渡します。SetNumberFormat(row, col, null) で表示形式を外し、GetNumberFormat(row, col) で読み出せます。

日付

日付は日付の値として入れ、見え方は表示形式で決めます。

sheet.SetValue(1, 3, CellValue.Date(new DateTime(2026, 10, 31).ToOADate()));
sheet.SetNumberFormat(1, 3, "yyyy\"年\"m\"月\"d\"日\"");               // "2026年10月31日"
sheet.SetNumberFormat(1, 3, "[$-411]ggge\"年\"m\"月\"d\"日\"");         // "令和8年10月31日"

Excel と同じく、日付の表示形式はただの数値にも効きます。シリアル値 46326 に yyyy/mm/dd を設定すれば 2026/10/31 と表示されます。

セルの表示を読む

GetDisplayText はグリッドが描くとおりの文字列を返します。エクスポート、メール本文、利用者に見える文字を確かめる単体テストに便利です。表示形式に色があれば、GetFormattedText がその色も返します。

string text = sheet.GetFormattedText(2, 1, out uint? color);
// text  = "▲45,200"
// color = 0xFFFF0000(ARGB)— セクションに色の指定がなければ null

シートの外で値を整形する

ラベルやグラフの見出し、集計行の文言には、NumberFormatter で double に直接コードを適用できます。画面のラベルと隣のセルの表示が揃います。

using unvell.ReoGrid.Core.Style;

if (NumberFormatter.TryFormat(1234567, "#,##0,\"千円\"", out string label, out _))
    totalLabel.Text = label;    // "1,235千円"

General や空のコードには false を返すので、そのときはアプリ側の整形に切り替えます。

数式の中では TEXT

数値を文字列とつなぐと、セルの表示形式は外れます。数式が見ているのは表示ではなく値だからです。数式の中で同じコードを使うには TEXT を使います。

sheet.SetFormula(5, 1, "SUM(B2:B4)");
sheet.SetNumberFormat(5, 1, "#,##0");                            // B6 は "1,189,367"

sheet.SetFormula(6, 1, "\"合計 \"&B6&\" 円\"");                   // "合計 1189367 円"
sheet.SetFormula(7, 1, "\"合計 \"&TEXT(B6,\"#,##0\")&\" 円\"");   // "合計 1,189,367 円"

利用者に表示形式を選ばせる

WinForms・WPF・Avalonia の各コントロールは、利用者の選択範囲に 1 回の呼び出しで表示形式を設定できます。ツールバーに「表示形式」のドロップダウンを置くなら、これだけで足ります。

grid.SetSelectionNumberFormat("#,##0");   // grid は ReoGridControl

列全体が選ばれているときは、データのあるセルに設定します。

XLSX に保存して Excel で開く

using unvell.ReoGrid.IO.Excel;

XlsxWriter.Write(workbook, "損益.xlsx");

表示形式は Excel の表示形式としてそのまま保存されるので、Excel で開いても同じ 1,234,567、同じ赤い ▲、ゼロは同じ - で表示されます。逆方向も同じで、XLSX を読み込むと各セルの表示形式が保たれます。Excel で書式を整えたテンプレートは、アプリでも同じ見え方になります。(Excel テンプレートに差し込んで出力する)

どのマシンでも同じ文字

ReoGrid V5 は、どのマシンでもコードを同じように表示します。地域設定にかかわらず , が桁区切り、. が小数点で、元号は内蔵の表から引きます。サーバーで作った帳票と利用者の PC の画面が、1 文字単位で一致します。


現時点での制限

  • 曜日の aaa(土)・aaaa(土曜日)は現時点では未対応で、書いた文字のまま表示されます。曜日は ddd(Sat)・dddd(Saturday)で表示できます。
  • _(次の文字の幅だけ空ける)と *(文字を繰り返してセル幅を埋める)は読み込めますが、セルには空きや埋め草を付けずに数値を表示します。
  • 1904 年からの日付システムには対応していません。

V4 から移行する場合

V4 では CellDataFormatFlag と NumberFormatArgs などの引数オブジェクトで表示形式を設定していました。V5 ではそれらがすべて表示形式コードに置き換わります。

// V4: worksheet.SetRangeDataFormat(range, CellDataFormatFlag.Number,
// V4:     new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 2, UseSeparator = true });
ws.SetNumberFormat(range, "#,##0.00");

V4 の「負数を赤の括弧で」は V5 では #,##0;[Red](#,##0) です。和暦も表示形式コードで書きます。ほかの対応は移行ガイドにまとめています。


まとめ

  • 表示形式コードは最大 4 つのセクション — 正の数 ; 負の数 ; ゼロ ; 文字列。負の数のセクションを書いたら、符号(-・▲・括弧)は自分で置く
  • 0 は常に数字を出し、# は意味のある桁だけを出す。末尾のカンマは 1,000 で割る — 千円単位・百万円単位の表示はこれで書ける
  • 色と条件は角括弧、引用符の中はそのまま表示、;;; は値を消さずに隠す
  • 時間の合計は [h]:mm。m が「分」になるのは h か ss の隣にあるときだけ
  • 表示形式が変えるのは見え方だけで、値は変わらない。 画面の数字どおりに合計を合わせたいなら ROUND で値を丸める
  • ReoGrid V5 は Excel のコードをそのまま使える — SetNumberFormat、GetDisplayText、TEXT、NumberFormatter、そして XLSX の読み書き

V5 の新機能を見る / 30 日間の評価版を試す


関連記事

ご自身のプロジェクトで ReoGrid を試す

.NET WinForms / WPF 向けの Excel 互換スプレッドシートコンポーネント。30 日間の無償トライアルをご利用いただけます。

ニュースレター

最新リリースをメールでお届け

ReoGrid の新バージョン・新機能・技術記事のお知らせをお送りします。配信停止はいつでも可能です。

関連する記事

Excel の「テーブル」を C# で作る — 「テーブルとして書式設定」が実際に保存しているもの

Excel の「テーブルとして書式設定」は、見出しに色が付き 1 行おきに縞が入るので書式に見えます。ところが保存したファイルを開いてみると、塗りを持つセルは 1 つもありません。Excel が保存しているのは「範囲・見出し行・スタイル名」を持つオブジェクトです。xlsx の中のテーブルの正体、組込 60 種のスタイルの中身、そして Excel がファイルを開けるかどうかを分ける 3 つの決まりを整理し、ReoGrid V5.1 の C# コードでフィルター▽と集計行付きのテーブルを作ります。

SUBTOTAL と AGGREGATE の違い — 「見えている行だけ」を集計する

フィルターで絞り込んでも SUM は隠れた行を数えたままです。画面の行と合計が食い違うこの問題に Excel が用意した答えが SUBTOTAL、その上位版が AGGREGATE で、こちらは列に 1 つ混ざった

壊れない入力シートを作る — ReoGrid V5 の入力規則・セルのメモ・シート保護

アプリの画面に表を出した瞬間、ユーザーは数式のセルを消し、単価に「12,000円」と打ち込みます。ReoGrid V5 で追加された「データの入力規則」「セルのメモ」「シート保護」の 3 つは、役割がそれぞれ違い、組み合わせて初めて壊れない入力シートになります。C# のコードで見積テンプレートを 1 枚組み立てながら、3 つの使い分けと、Excel 互換ゆえの落とし穴(入力規則が検査するのは手入力の値だけ・パスワードは暗号ではなく Excel の 16 ビット検証値・選択系フラグだけ既定が逆)まで整理します。