目次
はじめに
Excel VBA だけで JSON 形式のデータを扱う場合、ScriptControl を利用して JavaScript の eval
関数に解析させる手法が手軽です。本記事では、配列形式の JSON を読み込み、各オブジェクトの値をセルへ順次書き込む手順を解説いたします。
準備環境
項目 | 内容 |
---|---|
OS | Windows 10/11 |
Excel | Microsoft 365/2019/2016 |
追加ライブラリ | なし(標準機能のみ) |
サンプルコード
Sub ParseJsonWithScriptControl()
Dim jsonText As String ' JSON 文字列
Dim jsonArr As Object ' 解析後の配列
Dim itm As Object ' 各オブジェクト
Dim sc As Object ' ScriptControl
Dim tgtCell As Range ' 書き込み開始セル
' JSON 文字列を組み立て(カンマ区切りに注意)
jsonText = "[" & _
"{""Name"":""Mori"",""Value"":100}," & _
"{""Name"":""Hayashi"",""Value"":200}," & _
"{""Name"":""Ki"",""Value"":300}" & _
"]"
' ScriptControl で JSON を評価
Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"
Set jsonArr = sc.CodeObject.eval(jsonText)
' 書き込み開始セルを指定
Set tgtCell = Sheet1.Range("A2")
' 各オブジェクトをセルへ出力
For Each itm In jsonArr
tgtCell.Value = itm.Name
tgtCell.Offset(0, 1).Value = CallByName(itm, "Value", VbGet)
Set tgtCell = tgtCell.Offset(1) ' 次の行へ移動
Next itm
End Sub
コードのポイント
処理 | 説明 |
---|---|
ScriptControl | JavaScript 環境を動的に生成し、eval で JSON をオブジェクト化します。 |
JSON 文字列の区切り | 複数オブジェクトを並べる際は カンマ を忘れないよう注意します。 |
CallByName | プロパティ名を文字列で指定し、動的に値を取得します。 |
応用アイデア
目的 | 実装例 |
---|---|
ネストした JSON の解析 | itm.Children(0) や再帰的なループで深い階層をたどる |
VBA-JSON との併用 | 大規模データや型変換が必要な場合は外部ライブラリ(VBA-JSON)を検討 |
API から取得した JSON の処理 | MSXML2.XMLHTTP で API を呼び出し、ResponseText を jsonText に代入 |
まとめ
ScriptControl を使えば追加ライブラリなしで JSON を手軽に解析できます。配列型 JSON を Excel シートへ展開することで、データの整形や集計が容易になります。要件に応じて VBA-JSON ライブラリとも使い分けてください。