🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel TEXT 関数 — 数値を書式付きの文字列に変換する(そして合計できなくなる罠)

|

Excel TEXT 関数 — 数値を書式付きの文字列に変換する(そして合計できなくなる罠)

要点TEXT は数値(または日付。日付も数値そのものです)と書式コードを 受け取り、その書式で整形したテキスト文字列を返します。構文は =TEXT(value, format_text)=TEXT(1234.5, "$#,##0.00") は文字列 "$1,234.50" を、=TEXT(TODAY(), "yyyy-mm-dd") は文字列 "2026-07-02" を 返します。書式コードはセルのユーザー定義書式とまったく同じ言語ですが、決定的な違いが 一つあります。セルの表示形式は数値が数値のまま見た目を変えるだけなのに対し、TEXT書式を本物の文字列に焼き込むという点です。その文字列は文章の中では美しく機能 しますが、SUM の中では役に立ちません。数値が文章の一部にならなければならないときに TEXT を使いましょう。まだ計算に使うデータには絶対に使ってはいけません。

="Invoice total: " & TEXT(A1, "$#,##0.00")   ' -> "Invoice total: $1,234.50"
=TEXT(A2, "0.0%")                             ' 0.734 -> "73.4%"
=TEXT(B1, "00000")                            ' 42 -> "00042"  (先頭ゼロ)

ほとんどの人が TEXT に出会う理由は同じです。& で数値を文章にくっつけたら、数値が そのまま生々しく不格好に出てきた ——Total: $1,234.50 のはずが Total: 1234.5 に なってしまった、というわけです。TEXT はその解決策です。しかし同時に、本来はセルの 表示形式が正解だった場面でつい手を伸ばしてしまう関数でもあり、その結果「数値」の列が なぜか合計できない、と首をかしげることになります。このガイドでは、たった一つの考え方、 そこから導かれる罠、そして危険を扱えるだけの書式コードの知識をお伝えします。

このガイドで学べること

  • 基本となる考え方: TEXT は書式を文字列に焼き込む。セルの表示形式はそうしない
  • 文字列結合になぜ必要なのか —— & は書式を捨ててしまう
  • 最大の罠: TEXT の出力はテキストなので、SUM が静かに無視する
  • 書式コード速習: 0#、桁区切り、%、そして日付コード
  • 先頭ゼロ、そして月名や区切り記号にまつわるロケールの落とし穴
  • 判断のしどころ: TEXT かセルの表示形式か CONCAT/ROUND

基本となる考え方: 書式が置かれる、まったく異なる二つの場所

Excel の数値には表示があります。1234.5 と入力して通貨書式を適用すると、 セルには $1,234.50表示されますが、格納されている値は依然として 1234.5 の ままです —— 足し算も、平均も、グラフ化もできます。書式は、数値であり続けることをやめない 数値の上に被せたマスクにすぎません。

TEXT はそれとは違うことをします。値を読み取り、書式コードを適用し、その結果を テキストとして返します —— マスクと数値が融合して一つの文字列になるのです。

' セル A1 には 1234.5 が入っている
A1 に通貨書式          -> $1,234.50 と表示されるが VALUE は 1234.5 のまま (数値)
=TEXT(A1, "$#,##0.00")  -> 文字列 "$1,234.50" (テキスト。裏に数値はない)

このイメージを頭に置いてください。セルの表示形式は衣装を変えるだけ。TEXT は俳優 そのものを段ボールの切り抜きに変えてしまう。 以下の話はすべてここから導かれます。

文字列結合になぜ TEXT が必要なのか

TEXT が日常業務で存在する理由は、& 演算子(および CONCATTEXTJOIN)が 数値の書式を捨ててしまうからです。テキストに数値を結合すると、セルに表示されていた ものではなく、数値の生の値が返ってきます。

="Total: " & A1                        ' -> "Total: 1234.5"     (生のまま、不格好)
="Total: " & TEXT(A1, "$#,##0.00")     ' -> "Total: $1,234.50"  (書式付き)
="Due " & TEXT(B1, "mmmm d")           ' -> "Due July 2"        (B1 は日付)

これが TEXT の最も一般的で正当な使い方です。文章、ラベル、ファイル名、グラフの タイトルを組み立てていて、数値をセルでの見た目どおりに見せたい場面です。& は書式を 一緒に運べないので、自分で TEXT を使って運ぶわけです。この結合側のパターンについては CONCATTEXTJOIN を参照してください。

最初に噛みつく罠: 出力は計算できない

TEXT は文字列を返すため、その結果はもはや数値ではありません —— そして Excel は テキストを合計しません。これが「数式が 0 を返す」という古典的な驚きです。

' D2:D10 はすべて =TEXT(C2, "0.00")   -> 数値のように見える
=SUM(D2:D10)                          ' -> 0   (SUM はテキストを無視する)

ここから導かれるルールは容赦ないものです。まだ計算に使う列を TEXT で包んでは いけません。 数値を小数点以下 2 桁と通貨記号つきで表示させたいだけなら、それは値を 数値のまま保つセルの表示形式の仕事です。TEXT最後のステップ、つまり数値が 文字列になろうとしていて、その計算人生が終わったときだけに使いましょう。すでにテキストの 数値があって元に戻したいなら、それは逆関数の VALUE の出番です。

書式コード速習

format_text 引数は、[セルの書式設定] → [ユーザー定義] とまったく同じミニ言語です。 覚えるべきトークンはひと握りだけです。

トークン 意味 例 → 結果
0 数字、ゼロも表示 TEXT(5, "000")"005"
# 数字、先頭・末尾のゼロは非表示 TEXT(5, "#.##")"5"
, 桁区切り記号 TEXT(12000, "#,##0")"12,000"
. 小数点 TEXT(3.1, "0.00")"3.10"
% パーセント(×100 して記号付与) TEXT(0.25, "0%")"25%"
$ 通貨記号そのもの TEXT(9, "$0.00")"$9.00"

体に染み込ませるべき唯一の区別は、0 は数字を強制する、# は省略可能という点です。 パディングや小数点以下の桁を確実に出したいところ(金額なら 0.00)には 0 を、意味の ある桁のときだけ数字を出したいところには # を使います(#,##0.## は小数点以下 2 桁を 存在するときだけ表示します)。

日付: TEXT で最も検索される半分

日付は数値なので、TEXT は日付も書式化します —— そしてこれこそ、ほとんどの人が実際に 探しているものです。日付コードは次のとおりです。

=TEXT(A1, "yyyy-mm-dd")            ' -> "2026-07-02"   (ISO 形式。テキストとして正しく並べ替えられる)
=TEXT(A1, "dddd, mmmm d, yyyy")    ' -> "Thursday, July 2, 2026"
=TEXT(A1, "mmm-yy")               ' -> "Jul-26"
=TEXT(A1, "h:mm AM/PM")           ' -> "2:30 PM"
  • m は位置によって分または月を意味します —— h の後の mm は分、単独の mm は 月です。mmm = Julmmmm = Julymmmmm = J
  • d/dd = 日の数字、ddd = Thudddd = Thursday
  • ISO の日付文字列yyyy-mm-dd)を組み立てるのは、日付をテキストとして正しく 並べ替えられるようにする確実な方法です —— ファイル名やキーに便利です。

先頭ゼロとロケールの落とし穴

人がつまずく二つのポイントです。

  • 先頭ゼロ。 ゼロを保持しなければならない ID、郵便番号、部品番号は TEXT の 仕事です。=TEXT(42, "00000")"00042"。(さらに良いのは、こうしたコードを 最初からテキストとして保存することですが、数値として保存されてしまった場合は TEXT が 救ってくれます。)
  • ロケール。 月名や曜日名はブック/システムの言語に従うため、"mmmm" は英語 環境では July、ドイツ語環境では Juli になります。区切り記号も変わることがあります。 読み手のマシンに関係なく特定の言語が必要なら、コードの先頭にロケールタグを付けます。 たとえば =TEXT(A1, "[$-en-US]mmmm d") は英語の月名を強制します。

判断のしどころ: TEXT と代替手段

強い意見を言えば、たいていの場合、必要なのは TEXT ではなくセルの表示形式です。 本当に何がしたいのかを自問してください。

  • 数値をセル内で正しく見せたい(通貨、%、桁区切り)うえで計算も続けたい → 表示形式を適用します。TEXT は使いません。これが合計を壊す間違いです。
  • 数値を文字列のに入れている —— 文章、ラベル、ファイル名、グラフのタイトル → これが本当の TEXT の仕事です。ここでだけ使いましょう。
  • 実際の計算のために値を少ない桁数に丸めたい(格納される数値そのものを変えたい)→ それは ROUND であって TEXT ではありません。 書式化は丸めではなく、TEXT も丸めではありません —— 変えるのは表示であって、 次の計算に渡す値ではありません。
  • 逆変換が必要 —— テキストを本物の数値や日付に戻したい → VALUE / NUMBERVALUEDATEVALUE

TEXT はスプレッドシートのためのフォーマッターではなく、文字列のためのフォーマッター です。数値が数値であることをやめてテキストの一部になる必要があるときにだけ使い、セルの 見た目を整える近道として使ってはいけません。

ExcelMaster はどう役立つか

TEXT の書式コードの言語は、数か月ごとに学び直すたぐいのものです —— mmm だったか mon だったか、0.00#.## か、そしてなぜ合計が壊れたのか。 ExcelMaster はあなたが説明している内容から動作します ——「合計をこの文章に通貨として 入れて」「月を 3 文字の略称で表示して」「これらの ID を 5 桁にゼロ埋めして」—— そして 正確な書式コードを書きつつ、まだ計算が必要なところでは基になるデータを数値のまま保ちます。 3 つ先のタブで SUM がゼロを返すのを発見することなく、思い描いたとおりの文字列が 得られます。

よくある質問

なぜ SUM が私の TEXT のセルを無視して 0 を返すのですか?

TEXT は数値ではなくテキストを返し、SUM はテキストを飛ばすからです。列を =TEXT(...) で包んでしまい合計が 0 になったなら、セルの表示形式(値を数値のまま 保ちます)を適用すべきところで書式化してしまったのです。TEXT は文字列の一部になる数値 にだけ使いましょう。

Excel で日付をテキストとして書式化するには?

=TEXT(date, "書式コード") を使います。よく使うコード: "yyyy-mm-dd"2026-07-02"mmmm d, yyyy"July 2, 2026"mmm-yy"Jul-26yd の 隣では mm が月を、h の隣では分を意味することを覚えておきましょう。

TEXT で先頭ゼロを保持するには?

必要な桁幅ぶんの 0 トークンを使います。=TEXT(42, "00000")"00042"。郵便番号や ID に最適です —— もっとも、最初からテキストとして保存すればこの問題は完全に避けられます。

TEXT とセルの表示形式の違いは?

セルの表示形式は数値の見た目だけを変え、値は数値のまま計算を続けます。TEXT は 書式を焼き込んだ実際の文字列に数値を変換します —— 文字列結合には最適ですが、SUM にとっては致命的です。

TEXT の出力を数値に戻すには?

数値には VALUE(ロケール制御には NUMBERVALUE)を、 日付には DATEVALUE を使います。あるいは手早い 応急処置としては、テキストに 1 を掛けます(=A1*1)。

検証環境

検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-02。

関連ガイド: Excel VALUE と NUMBERVALUE · Excel DATEVALUE と TIMEVALUE · Excel CONCAT · Excel TEXTJOIN · Excel ROUND