JSONをExcelに取り込む3つの方法|Power Query・Python・ブラウザツール
JSONファイルをExcelに取り込むには、主に以下3つの方法があります。
| 方法 | 難易度 | 実行速度 | ネストJSON対応 | ファイルサイズ上限 | おすすめシーン |
|---|---|---|---|---|---|
| Power Query | 低 | データ量が多いと遅くなりやすい | あり(手動展開) | 実用上約50MB | Excel 2016以降のWindowsで単発取り込み |
| Python(pandas) | 中 | 高速 | あり(自動) | RAM依存 | バッチ処理・大容量ファイル・定期実行 |
| ブラウザツール | 低 | 高速 | 部分的(テキストにフラット化) | ツールによる | インストール不要で手軽に変換したいとき |
※ファイルサイズ上限や機能の詳細は各ツールの公式ドキュメントで最新情報を確認してください。
この記事では、Excelの標準機能であるPower Queryから、Pythonスクリプト、ブラウザ完結型の変換ツールの使い方を解説していきます。
Power Query:コードなしでJSONをExcelに取り込む
Power QueryはExcel 2016以降に標準搭載されています。JSONファイルを読み込み、ネストされたオブジェクトを列に展開し、ソースファイルへの接続を保持して後からデータを更新できます。
Excel 2010・2013ではPower Queryアドインをインストールできますが、「JSONから」コネクタはExcel 2016以降でのみ利用可能です。Excel 2010・2013でJSONを取り込む場合は、PythonやブラウザツールでCSVに変換してからインポートする方法を検討してください。
JSONインポーターを開く
- Excelで新規ブックを開きます。
- 「データ」タブ → 「データの取得」→「ファイルから」→「JSONから」を選択します。
- JSONファイルを選択して「インポート」をクリックします。

ExcelがPower Queryエディターを開き、JSON構造のプレビューが表示されます。この時点では、レコード・リスト・値などの形式で表示され、まだ整形されたテーブルにはなっていません。
「展開」ボタンでネストされたJSONをフラット化する
ここが多くの人がつまずく箇所です。Power Queryはネストされたオブジェクトを [Record]、配列を [List] として表示します。これらを列に展開する必要があります。
- Power Queryエディター左上の「テーブルへ変換」をクリックします。デフォルト設定のまま「OK」を押します。


[Record]または[List]と表示されている列を探し、列ヘッダー右の**展開アイコン(矢印2つ)**をクリックします。
![]()
- 保持したいフィールドを選択して「OK」をクリックします。

[Record]と[List]の表示がなくなるまで、手順2〜3を繰り返します。
配列列を展開すると、Power Queryは配列の要素ごとに親行をコピーします。1人の顧客が3件の注文を持っている場合、注文の配列を展開すると、同じ顧客データを持つ3行が生成されます。これは想定通りの動作ですが、展開後に行数を確認し、集計でダブルカウントが発生しないか確認してください。
テーブルを読み込み、ソースファイル更新時に更新する
- 左上の「閉じて読み込む」をクリックします。

- 新しいワークシートにテーブルが挿入されます。

ソースのJSONファイルが更新されたら、テーブルを右クリックして「更新」を選択するだけで、設定をやり直さずに再取り込みできます。展開やフィルタの手順はPower Queryに記録されています。
Python(pandas):5行でJSONをExcelに変換する
大容量ファイル、深いネスト構造、大量のJSONファイルの一括変換など、Power Queryが苦手とする場面ではPythonのpandasが確実に対処できます。まだインストールしていない場合は以下を実行してください。
pip install pandas openpyxl
フラットなJSONの基本変換
import pandas as pd
df = pd.read_json("data.json")
df.to_excel("data.xlsx", index=False)
ネストのないフラットなJSON(オブジェクトの配列)はこれだけで変換できます。出力はExcelで開ける標準の.xlsxファイルです。
json_normalize()でネストされたJSONを処理する
実際のAPIレスポンスには、ほぼ必ずネストされたオブジェクトや配列が含まれています。json_normalize() を使うと、ネスト構造をドット区切りの列名でフラット化できます。
import json
import pandas as pd
with open("data.json") as f:
data = json.load(f)
df = pd.json_normalize(
data,
record_path=["orders"], # フラット化するネスト配列
meta=["customer_id", "name"], # 親フィールド(各行に引き継ぐ列)
sep="_" # ネスト列名の区切り文字
)
df.to_excel("orders_flat.xlsx", index=False)
注文1件につき1行が生成され、customer_id と name が各行に繰り返されます。Power Queryの展開と同じ結果を、1つのコマンドで実現できます。
複数のJSONファイルを一括変換する
import glob
import pandas as pd
for path in glob.glob("exports/*.json"):
df = pd.read_json(path)
out = path.replace(".json", ".xlsx")
df.to_excel(out, index=False)
print(f"変換完了: {out}")
exports/ フォルダ内のすべての .json ファイルを .xlsx に変換するループです。Excelの行数上限(1,048,576行)を超えるファイルの場合は、df.iloc[start:end] でDataFrameを分割し、各チャンクを別ファイルに書き出してください。
ブラウザ完結型のJSON→Excel変換ツールを使う
Excelをインストールしていない場合や、手軽に単発変換したい場合は、ブラウザツールにJSONファイルをドラッグ&ドロップするだけでExcelやCSVとしてダウンロードできます。
ブラウザ内処理型とサーバー処理型の違い
オンライン変換ツールには2種類あり、機密データを扱う場合は区別が重要です。
- ブラウザ内処理型(ローカル処理): JSONファイルがパソコンの外に出ません。変換処理はブラウザ内のJavaScriptまたはWebAssemblyで完結します。LeapRows JSON→Excel変換ツール(※筆者開発ツール)はこの方式で、DuckDB-WASMを使ってJSONを読み込み、XLSXファイルをローカルで生成します。
- サーバー処理型: ファイルがリモートサーバーにアップロードされ、変換後に返ってきます。ケースによっては大容量ファイルで有利なこともありますが、データが第三者のサーバーを経由します。
社内データや機密データを扱う場合はローカル処理型を選んでください。公開データであればどちらのタイプも使えます。
ブラウザツールがPower Queryより便利な場面
- Linux・ChromebookなどPower Queryが利用できない環境にいる
- JSONがシンプル(フラットまたは1階層のネスト)で、手早く.xlsxをダウンロードしたい
- PythonやExcelのインストールなしで変換したい
注意点として、ブラウザツールはネスト構造をテキスト文字列としてフラット化することが多く、列への展開は行いません。ネストされたデータの行・列マッピングを細かく制御したい場合は、Power QueryまたはPythonのほうが適しています。
よくあるJSONインポートエラーと対処法
「データが見つからない」または数行しか表示されない
JSONファイルに構文エラーがある可能性が高いです。カンマの欠落、末尾の余分なカンマ、閉じ忘れたブラケットがあると、Power Queryがインポートを途中で打ち切ることがあります。
対処法: ファイルの中身をオンラインのJSONバリデーター(「JSON lint」で検索)に貼り付け、エラー箇所を確認してください。よくある原因は以下の通りです。
| よくあるエラー | 正しい形式 |
|---|---|
| 配列末尾の余分なカンマ | [1, 2, 3] (末尾なし) |
| シングルクォート | {"key": "value"} (ダブルクォート) |
| エスケープされていない特殊文字 | 文字列内で特殊文字を適切にエスケープ |
[Record] や [List] がそのまま表示される
展開の手順をスキップしています。Power Queryエディターに戻り(クエリペインでクエリをダブルクリック)、[Record] や [List] と表示されている列ヘッダーの展開アイコンをクリックしてください。
大きなJSONファイルでExcelがクラッシュ・フリーズする
Excelの行数上限は1,048,576行です。上限以下でも、50〜100MBを超えるファイルは変換処理中にPower Queryがすべてのデータをメモリに読み込むため、メモリ不足になることがあります。
対処法の比較:
| 対処法 | 難易度 | 適用シーン |
|---|---|---|
| Pythonでフィルタ・集計してから出力 | 中 | 不要な行が多い場合 |
JSONを小チャンク分割(jq使用) | 中 | ファイルサイズが大きい |
| Excelの行数制限がないツール使用 | 低 | 初期分析・フィルタ後の出力 |
文字化けが発生する
JSONファイルのエンコーディングがExcelの想定と一致していません。ほとんどのJSONはUTF-8ですが、レガシーシステムからエクスポートされた場合、Shift-JIS・Windows-1252などのエンコーディングになっていることがあります。
対処法: VS Codeやメモ帳などのテキストエディタでファイルを開き、ステータスバーに表示されるエンコーディングを確認してください。UTF-8でなければ、UTF-8で保存し直してからインポートします。Pythonの場合はエンコーディングを明示的に指定します。
df = pd.read_json("data.json", encoding="utf-8-sig") # BOM付きUTF-8に対応
変換前にJSONの構造を確認する
Power Queryで試行錯誤する前に、30秒でJSONの構造をプレビューしておくと作業がスムーズになります。
まず構文を検証する
ファイルをJSONバリデーターに貼り付けるか、ターミナルで以下を実行してください。
python -m json.tool data.json > /dev/null
ファイルが正常であれば出力はありません。壊れている場合は、行番号とエラーメッセージでどこを直せばよいかわかります。
JSONビューアで構造をプレビューする
VS Code(JSONフォーマット機能が標準搭載)またはオンラインのJSONビューアでファイルを開いてください。以下の点を確認します。
- トップレベルの構造: オブジェクトの配列
[{...}, {...}]か、ネスト配列を含む単一のオブジェクト{"results": [...]}か。Power Queryはどちらにも対応していますが、展開の手順が変わります。 - ネストの深さ: 階層数を確認します。1階層のネストは比較的簡単です。3階層以上になるとPythonでフラット化するほうが速い場合があります。
- キーの不一致: 一部のオブジェクトに他のオブジェクトにないフィールドがある場合、Power Queryは空欄を
nullで埋めます。事前に把握しておくと混乱を防げます。
フラット化の方針をExcelを開く前に決めておくと、Power Query・Python・ブラウザツールのどの方法を使う場合でもインポートがスムーズになります。