Excel VBA で JSON データを解析してセルへ書き込む方法

目次

はじめに

Excel VBA だけで JSON 形式のデータを扱う場合、ScriptControl を利用して JavaScript の eval 関数に解析させる手法が手軽です。本記事では、配列形式の JSON を読み込み、各オブジェクトの値をセルへ順次書き込む手順を解説いたします。


準備環境

項目内容
OSWindows 10/11
ExcelMicrosoft 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

コードのポイント

処理説明
ScriptControlJavaScript 環境を動的に生成し、eval で JSON をオブジェクト化します。
JSON 文字列の区切り複数オブジェクトを並べる際は カンマ を忘れないよう注意します。
CallByNameプロパティ名を文字列で指定し、動的に値を取得します。

応用アイデア

目的実装例
ネストした JSON の解析itm.Children(0) や再帰的なループで深い階層をたどる
VBA-JSON との併用大規模データや型変換が必要な場合は外部ライブラリ(VBA-JSON)を検討
API から取得した JSON の処理MSXML2.XMLHTTP で API を呼び出し、ResponseTextjsonText に代入

まとめ

ScriptControl を使えば追加ライブラリなしで JSON を手軽に解析できます。配列型 JSON を Excel シートへ展開することで、データの整形や集計が容易になります。要件に応じて VBA-JSON ライブラリとも使い分けてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次