本文へ移動
ZEKILO Dev
整形

JSONをExcelで開く:CSVの文字化けとBOM・カンマ対策

2026.10.03 更新 · 6分で読めます

JSONをExcelで開くには、UTF-8のBOM付きCSVに変換するのが簡単です。日本語が文字化けする理由、カンマ・引用符・改行を含む値を囲むルール、先頭のゼロが消える問題と対処法を解説します。

JSON ↔ CSV 変換をすぐに使う

JSONのデータをExcelで見るには、CSVに変換するのがいちばん簡単です。オブジェクトの配列を行に展開し、ファイルをBOM付きのUTF-8で保存し、カンマ・二重引用符・改行を含む値を二重引用符で囲みます。BOMは日本語の文字化けを防ぎ、引用符のルールは値が隣のセルにずれるのを防ぎます。JSON ↔ CSV 変換は、これらを初期設定のまま適用します。

JSONを行と列にする

表は同じ列を持つ行の集まりなので、入力はオブジェクトの配列にします。オブジェクト1つが1行、キー1つが1列になります。

  • 列の順序: キーが最初に現れた順です。あとのオブジェクトで初めて出てくるキーは右側に追加され、そのキーを持たない行は空欄になります。
  • 入れ子のオブジェクト: 既定ではドット区切りのパスに展開します。{"a":{"b":1}}はa.bという列になります。入れ子のオブジェクトをJSON文字列のまま1つのセルに入れる方法も選べます。
  • 配列の値: JSON文字列として1つのセルに入ります。
  • そのほかの形: {"a":1}のようなオブジェクト1つは1行として扱います。"text"のような値は表にできないため、「CSVの表に変換できないJSONです」と表示されます。

キーの異なるオブジェクト2つで、最初の2つのルールをまとめて確認できます。

入力   [{"a":{"b":1}},{"c":2}]

出力   a.b,c
       1,
       ,2

自作の変換コードでセルに[object Object]と出るのは、JavaScriptがオブジェクトをシリアライズせずに文字列にしたためで、このように展開すれば起こりません。

カンマ・引用符・改行

CSVに公式の標準はありません。RFC 4180は、多くの実装が従っている形式を記録した情報提供の文書で、扱いにくい値についてのルールは短いものです。

  • 改行、二重引用符、カンマを含むフィールドは二重引用符で囲みます。
  • その中の二重引用符は、2つ重ねてエスケープします。
  • レコードは1行に1つずつ書き、改行はCRLFです。

実際のデータに当てはめると次のようになります(2件目は韓国語の名前です)。

入力   [{"id":1,"name":"Kim, Jr."},{"id":2,"name":"이\"민\""}]

出力   id,name
       1,"Kim, Jr."
       2,"이""민"""

1件目の名前にはカンマがあるので引用符で囲まれ、3列目にずれません。2件目には二重引用符があるので、値を囲んだうえで内側の引用符を2つ重ねています。末尾の3つの引用符は、重ねた引用符1つ分と閉じる引用符です。特殊な文字のない値は囲みません。

引用符の中の改行は値の一部です。Excelは複数行のセルとして表示しますが、ファイルを行単位で分割するだけの単純なスクリプトはレコードを2つに切ってしまいます。値をカンマでつなぐだけでCSVを作ってはいけない理由です。

Excelで文字化けする理由とBOM

CSVファイルには文字コードを示す情報がありません。UTF-8のBOMはファイルの先頭に置く文字U+FEFFで、RFC 3629によると3バイトのEF BB BFです。「このファイルはUTF-8です」という署名の役割を果たします。

Microsoftのサポート記事は、UTF-8でエンコードされたCSVファイルはBOM付きで保存されていれば通常どおり開けると説明しています。BOMがない場合は、「データ」タブの「テキストまたは CSV から」(記事によっては「テキスト/CSV から」と表記)で取り込むか、テキスト インポート ウィザードを使うよう案内しています。

署名がないと、同じバイト列を従来の地域別の文字コードで読むことがあり、ASCII以外の文字がすべて化けます。UTF-8のバイト列を、日本語版Windowsの従来の文字コードであるShift_JIS(CP932)として解釈すると次のようになります。

UTF-8で書いた文字 バイト列 Shift_JISとして読んだ結果
名前 E5 90 8D E5 89 8D 蜷榊燕
東京 E6 9D B1 E4 BA AC 譚ア莠ャ

1文字が3バイトのUTF-8の漢字を2バイトの文字や1バイトの半角カナとして読むため、見慣れない漢字と半角カナが混ざります。データが壊れたわけではなく読み方が違うだけなので、BOMを付けるか、文字コードを指定して取り込めば直ります。

ツールでは、ダウンロードするファイルにUTF-8のBOMを付けるオプションが初期設定でオンになっています。CSVをExcelではなく別のプログラムに渡すときはオフにしてください。BOMを想定していないパーサーは、この文字を最初の列名に付いた見えない文字として扱うことがあります。JSONは逆で、RFC 8259はネットワークで送信するJSONの先頭にBOMを付けてはならないと定めています。BOMで始まるファイルをツールで開くと、BOMを取り除いて「BOMを削除しました」と表示します。

開いたあとにExcelが変える値

CSVが正しくても、Excelは数値や日付に見える値を自動的に変換します。Microsoftの記事が挙げている自動変換は次のとおりです。

  • 先頭のゼロを削除します。007は7になります。
  • 大きな数値を1.23E+15のような指数表記に変換し、数値データを15桁の精度に切り捨てます。長いIDやカード番号のように桁数の多い値が変わります。
  • 数字の間に文字Eがある値を指数表記に変換します。
  • 文字と数字が連続する一部の値を日付に変換します。

ファイルには元の文字がそのまま残っていて、Excelが読み込むときに変換しています。こうした列をそのまま残すには、ダブルクリックで開かずに取り込みを使います。記事の手順は、「データ」タブで「テキストまたは CSV から」を選び、プレビューから編集に進んで、対象の列のデータ型をテキストにするというものです。メニューの表示名はExcelのバージョンによって異なる場合があります。2026年10月時点で、同じ記事はExcel for Microsoft 365とExcel 2024に、これらの動作を無効にできる自動データ変換の設定があると案内しています。

逆方向にも同じ落とし穴があります。ツールでCSVをJSONに変換するときは数値の推論が初期設定でオフなので、次のCSVは

id,zip
1,007

[{"id": "1", "zip": "007"}](1行に縮めて表記)になり、郵便番号が文字列のまま残ります。

症状別の対処

Excelでの症状 原因 対処
日本語が文字化けする BOMのないUTF-8ファイル BOM付きで保存するか、「データ」タブから取り込む
値が隣のセルにずれる 囲まれていない値の中のカンマ フィールドを二重引用符で囲む
1件のレコードが複数行に分かれる 囲まれていない値の中の改行 フィールドを二重引用符で囲む
007が7に、長い番号が1.23E+15になる Excelの自動的な数値変換 その列をテキストとして取り込む
セルに[object Object]と表示される シリアライズされていない入れ子のオブジェクト ドット区切りに展開するかJSON文字列にする

ZEKILO Devで変換する

  1. JSON ↔ CSV 変換にJSONを貼り付けるか、.jsonファイルを開きます。
  2. 必要に応じて、区切り文字(カンマ・セミコロン・タブ・縦線)、入れ子のオブジェクトの扱い、改行(CRLF・LF)、UTF-8のBOMのオプションを変更します。
  3. .csvファイルをダウンロードしてExcelで開きます。

変換はブラウザ内で行われ、データはサーバーに送信されません。

まとめ

  • オブジェクトの配列をCSVに変換します。入れ子のオブジェクトはドット区切りの列になります。
  • カンマ・二重引用符・改行を含む値は二重引用符で囲み、内側の引用符は2つ重ねます(RFC 4180)。
  • Excel向けのファイルはBOM(EF BB BF)付きのUTF-8で保存すると、日本語が文字化けしません。別のプログラムに渡すときはBOMを外します。
  • 郵便番号や長いIDの列は、テキストとして取り込めばExcelに書き換えられません。

この記事に関連するツール

出典と基準

ほかのガイド