【Excel VBA】JSONパース処理が遅い

Excel VBA

ExcelのVBAでJSON形式のデータを取り扱う場合の注意点をメモ

基本よく使われるパターンとして「JScript」を活用した関数を作成してパースするといった形になると思います。この形は一般的によく紹介されている方法です。

Function ParseJson(strJSON As String) As Object
    Dim strFunc As String
    Dim js As Object

    Set js = CreateObject("ScriptControl")
    js.Language = "JScript"

    strFunc = "function jsonParse(s) { return eval('(' + s + ')'); }"
    js.AddCode strFunc

    Set ParseJson = js.CodeObject.jsonParse(strJSON)
End Function

今回この関数を利用してパースしたJSONデータをループで取り出す際、非常に処理時間が掛かることが発覚しました約5,000レコードで10分以上かかりました。厳密に言うと、パース後の配列ネスト処理が非常に遅いです。

別の方法でJSON形式のパースができないかと調査した結果、「VBA-JSON」というライブラリを使用したところ処理速度は大幅に改善されました。

もし処理時間が遅いといったケースがあれば「VBA-JSON」を試してみるとよいかもしれません。

GitHubに最新版のソースがあります。
– -> https://github.com/VBA-tools/VBA-JSON

コメント

タイトルとURLをコピーしました