概要
Excelの表から、こんな「JSONっぽい文字列」を作りたくなるときがあります。
{"id":1,"name":"山田太郎","age":30}
あるいは複数件をこう並べたいこともあります。
[
{"id":1,"name":"山田太郎","age":30},
{"id":2,"name":"佐藤花子","age":25}
]
ここでは、本物のJSONとしてプログラムに渡す、というよりも
- 「JSONっぽい書式の文字列をExcelで組み立てたい」
- 「テーブルから簡易なJSON風データを作りたい」
という用途をイメージして、TEXTJOIN + 文字列結合 (&) を使った「JSON風文字列生成」の型を、初心者向けにかみ砕いて解説します。
基本の考え方
JSON(風)文字列は「ただの文字列」
Excelから見れば、JSONも「単なる1本の文字列」です。
{"id":1,"name":"山田太郎","age":30}
これは Excel 的には、こういう「1本のテキスト」です。
{ "id":1,"name":"山田太郎","age":30 }
だからExcelでは、
「部品の文字列を & でくっつける」+「複数行のレコードは TEXTJOINでつなぐ」
と考えればOKです。
- 1件分の
{…}をまず1本の文字列にする - 複数件あれば、その
{…}をカンマ区切りで TEXTJOIN する - 全体を
[と]で挟めば“配列風”にもできる
という流れです。
1行=1件のJSON風オブジェクトを作る基本パターン
シンプルな1件分のJSON風
まずは「1件分」をしっかり作れるようにします。
例として、次のような表を考えます。
- A列:id
- B列:name
- C列:age
A2:1
B2:山田太郎
C2:30
この1行から、次のようなJSON風文字列を作ります。
{"id":1,"name":"山田太郎","age":30}
D2 に次の式を書きます。
="{""id"":" & A2 &
",""name"":""" & B2 & """" &
",""age"":" & C2 &
"}"
ポイントをかみ砕くと:
- 文字列のダブルクォーテーション
"を書くには、式の中では""と2つ重ねる必要があります
("{""id"":"は、実際には{"id":という文字列になる) - 数値(id, age)はそのまま連結(クォーテーションなし)
- 文字列(name)は
"...の形にしたいので、前後に"""を付けている
最初はゴチャっと見えますが、
「JSONの見た目」そのままを、Excelの文字列として & で組み立てているだけです。
複数行を「配列風」JSONにする(TEXTJOIN の出番)
複数件を [, , ] でまとめる
さきほどの表が、2行分あるとします。
A2:1 / B2:山田太郎 / C2:30
A3:2 / B3:佐藤花子 / C3:25
それぞれを D2, D3 で「1件分のJSON風」の形にしておきます。
D2:
="{""id"":" & A2 & ",""name"":""" & B2 & """,""age"":" & C2 & "}"
D3:
="{""id"":" & A3 & ",""name"":""" & B3 & """,""age"":" & C3 & "}"
D2:D3 が次の2つの文字列になった状態をイメージしてください。
{"id":1,"name":"山田太郎","age":30}{"id":2,"name":"佐藤花子","age":25}
これらを「配列風」に1本の文字列にまとめるのが TEXTJOIN の役割です。
E2 に次の式を書きます。
="[" & TEXTJOIN(",", TRUE, D2:D3) & "]"
動きとしては:
TEXTJOIN(",", TRUE, D2:D3)
→ 2つの JSON風文字列をカンマでつなぐ
→{"id":1,"name":"山田太郎","age":30},{"id":2,"name":"佐藤花子","age":25}- それを
"[" & … & "]"で挟む
→[{"id":1,"name":"山田太郎","age":30},{"id":2,"name":"佐藤花子","age":25}]
これで、「範囲 D2:Dn にある“1件分JSON風文字列”を全部まとめて配列化する」型ができます。
TEXTJOINで「項目ごとのJSON風」も作れる
列の値を「key: value」の配列にする発想
少し別のパターンとして、
A列に項目名、B列に値があり、それを全部まとめて
{"id":1,"name":"山田太郎","age":30}
のようにしたい、というケースもあります。
例:
A2:id / B2:1
A3:name / B3:山田太郎
A4:age / B4:30
これを「A列=キー」「B列=値」と見て、
1件のオブジェクトを TEXTJOIN で組み立てるイメージです。
まず、C列に「"キー":値」の形を作ります。
C2:
="""" & A2 & """:" & B2
C3(文字列で扱いたいときはこう):
="""" & A3 & """:""" & B3 & """"
C4:
="""" & A4 & """:" & B4
C2:C4 が
"id":1"name":"山田太郎""age":30
という文字列になったら、D2 で TEXTJOIN を使ってまとめます。
D2:
="{" & TEXTJOIN(",", TRUE, C2:C4) & "}"
これで
{"id":1,"name":"山田太郎","age":30}
という形に1本でまとまります。
「1行=1項目」の形からJSON風を作りたいときに使える考え方です。
注意点・割り切りポイント
JSON風文字列をExcelで作るときは、次の点は“割り切り”が必要です。
- ダブルクォーテーション
"の扱いがややこしい(式中では""と書く) - 本格的なJSONのエスケープ(特殊文字の扱い)まではExcel単体では難しい
- 実運用でAPIなどに渡す“厳密なJSON”が必要なら
Power Query・Power Automate・プログラム側での整形を検討したほうが安全
ただ、「テスト用のJSON風文字列をすぐ欲しい」「資料用にJSON風の見た目を作りたい」みたいなライトな用途なら、今回のパターンで十分役立ちます。
問題1
A2 に 1、B2 に「山田太郎」、C2 に 30 が入っています。
この1行から、次のJSON風文字列
{"id":1,"name":"山田太郎","age":30}
を D2 で生成したいです。
TEXTJOIN は使わず、& でつなぐ式を書いてください。
="{""id"":" & A2 & ",""name"":""" & B2 & """,""age"":" & C2 & "}"
問題2
A2:C3 に次のデータがあります。
- A2:1 / B2:山田太郎 / C2:30
- A3:2 / B3:佐藤花子 / C3:25
D2, D3 にそれぞれ「1件分のJSON風文字列」を作る式を書いてください。
(形式は {“id”:◯,”name”:”◯”,”age”:◯} とします)
D2:
="{""id"":" & A2 & ",""name"":""" & B2 & """,""age"":" & C2 & "}"
D3:
="{""id"":" & A3 & ",""name"":""" & B3 & """,""age"":" & C3 & "}"
問題3
問題2で D2:D3 にできた2つのJSON風文字列を、
1本の「配列風JSON」文字列
[{"id":1,"name":"山田太郎","age":30},{"id":2,"name":"佐藤花子","age":25}]
として E2 にまとめたいです。
TEXTJOIN を使った式を書いてください。
="[" & TEXTJOIN(",",TRUE,D2:D3) & "]"
問題4
A2:A4 に「id」「name」「age」、
B2:B4 に「1」「山田太郎」「30」が入っています。
C2:C4 に "キー":値 の形を作り、
D2 で {"id":1,"name":"山田太郎","age":30} というJSON風文字列を生成したいです。
C2 と D2 の式を書いてください。
C2:
="""" & A2 & """:" & B2
(name のような文字列は B3 用に)
="""" & A3 & """:""" & B3 & """"
D2:
="{" & TEXTJOIN(",",TRUE,C2:C4) & "}"
問題5
A2:C4 に次のようなデータがあります。
- 行2:1, 山田太郎, 30
- 行3:2, 佐藤花子, 25
- 行4:3, 高橋一郎, 40
それぞれの行から 1件分のJSON風文字列を D列に作り、
さらに E2 で3件分を配列風にまとめたいです。
D2 の式(下にコピー前提)と、E2 の式を書いてください。
D2(下にコピーする):
="{""id"":" & A2 & ",""name"":""" & B2 & """,""age"":" & C2 & "}"
E2(配列風にまとめる):
="[" & TEXTJOIN(",",TRUE,D2:D4) & "]"
TEXTJOIN を「レコード同士をつなぐ接着剤」として使い、
1件分の {...} を & で組み立てる、という分業をさせると、
Excelでも十分「JSON風」の文字列が扱えるようになります。
コードっぽいことをExcelでやる最初の練習としても、ちょうどいい題材です。
