Excel関数 逆引き集 | JSON風文字列生成 → TEXTJOIN

Excel
スポンサーリンク

概要

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でやる最初の練習としても、ちょうどいい題材です。

Excel
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました