【VBA】VBA-JSONのインストール方法と初心者向けの簡単な使い方

本ページはプロモーションが含まれています

VBAでJSONを扱いたいけれど、どうすればいいか分からない…そんな悩みを解決します!この記事では、外部ライブラリ「VBA-JSON」を使って、VBAで手軽にJSONデータを操る方法を、初心者にも分かりやすく解説します。

そもそもJSONって何?

JSON(JavaScript Object Notation)は、テキストベースのデータ交換フォーマットです。Web APIからデータを取得する際など、様々な場面で利用されています。

JSONの基本構造と記述ルール

  • 項目は必ず””(ダブルクォーテーション)で囲む
  • 文字列は必ず””(ダブルクォーテーション)で囲む
  • 数値は小数点型を含めてそのまま表記
  • 真偽値(Boolean)は「true、false」のどちらか ※小文字、””は付けない
  • Null値は「null」 ※小文字、””は付けない
  • 『[]』の配列内も上記と同じルール

<key>: <value>」 の形式が基本で、複数のデータを {} で囲んで「オブジェクト」として、また、順序のあるデータのリストを [] で囲んで「配列」として表現します。軽量で人間にも機械にも読みやすいのが特徴です。

他にも細かな点はいくつかありますが、本格的に覚えるならWEB系をやる時で大丈夫かと。

JSONデータのサンプル

CSVほど一見でわかる形式ではないのでサンプルと共に見方の説明になります

例えばこんなJSON形式のデータがあるとして

[{"name":"Javeo","birthdate":{"year":2000,"month":1,"day":1},"height":180,"weight":70,"favorite_foods":["Meat","Vegetables"],"glasses":true},{"name":"Javelin","birthdate":{"year":2002,"month":2,"day":2},"height":150,"weight":null,"favorite_foods":["Sweets"],"glasses":false}]

よく見るわかりやすい形にすると・・・※VSCodeなどツールを使えば簡単に変換できます

[
  {
    "name": "Javeo",
    "birthdate": {
      "year": 2000,
      "month": 1,
      "day": 1
    },
    "height": 180,
    "weight": 70,
    "favorite_foods": [
      "Meat",
      "Vegetables"
    ],
    "glasses": true
  },
  {
    "name": "Javelin",
    "birthdate": {
      "year": 2002,
      "month": 2,
      "day": 2
    },
    "height": 150,
    "weight": null,
    "favorite_foods": [
      "Sweets"
    ],
    "glasses": false
  }
]

これをEXCEL的に表にするとこうなります

name birthdate height weight favorite_foods glasses
year month day
Javeo 2001 1 1 180 70 Meat Vegetables true
Javelin 2002 2 2 150 Sweets false

つまりJSONをざっくり説明すると必ず項目と値が対になっていて、『{}』が階層を『[]』は配列のデータ群になっていると思えばOK

VBAでJSONを扱う準備をしよう!

VBAには標準でJSONを扱う機能がないため、オープンソースのライブラリ「VBA-JSON」を導入します。

「VBA-JSON」の導入手順

導入までは3STEPで完了します

手順
  • STEP1
    ライブラリのダウンロード

    GitHubのVBA-tools/VBA-JSONリポジトリにアクセス

  • STEP2
    ファイルを探す

    ページ内にある「JsonConverter.bas」をダウンロード

    ※何年も更新されてませんが文字列を分解するプログラムで特に改良点もないってことだけなので気にせず

  • STEP3
    VBAへのインポート

    VBAで使えるようにするにはVBEの画面でインポートするだけ

    プロジェクトエクスプローラー
    右クリック→「ファイルのインポート」

    もしくは「JsonConverter.bas」をプロジェクトエクスプローラーへドラック&ドロップでもOK

VBAでJSONを解析(パース)してみよう

JSON形式のテキストデータをVBAで扱えるデータ構造(DictionaryオブジェクトやCollectionオブジェクト)に変換することを「解析(パース)」と言います

JsonConverterモジュールにある ParseJson 関数を使えば、この処理が一行で完了します

ということでサンプルコードを

' /// 事前準備 ///
' VBEの [ツール] > [参照設定] から下記2つにチェックを入れてください
' 1. Microsoft ActiveX Data Objects 6.1 Library (バージョンは環境により異なります)
' 2. Microsoft XML, v6.0
Sub GetJsonData()
    Dim http As MSXML2.XMLHTTP60
    Dim jsonText As String
    Dim parsedData As Object ' 解析後のデータ格納用

    ' Web APIからJSONデータを取得(例)
    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "GET", "https://javeo.jp/wp-json/test/v1/data", False
    http.send
    jsonText = http.responseText

    ' ★★★ ここがポイント!JSONを解析 ★★★
    Set parsedData = ParseJson(jsonText)

    ' 解析したデータをデバッグ出力
    Debug.Print "名前: " & parsedData(1)("name")
    Debug.Print "体重: " & parsedData(1)("height")
    
    ' 配列のデータを取り出す
    Set http = Nothing
    Set parsedData = Nothing
End Sub

結局VBA-JSONを使ってる箇所はこの一行だけ

Set res = ParseJson(.responseText)

でもこの一行がないと一番最初のただの長い文字になってしまうところをこんな感じで要素を指定してデータを取り出すことができます

VBAオブジェクトをJSON文字列に変換(生成)

逆に、VBAのDictionaryオブジェクトやCollectionオブジェクトからJSON形式の文字列を生成することも可能で、 ConvertToJson 関数を使用します

Sub CreateJsonString_Revised()
    Dim postData As Object
    Dim skillsCollection As Collection
    Dim jsonString As String

    ' データを格納する親オブジェクトを準備
    Set postData = CreateObject("Scripting.Dictionary")

    ' 基本的なキーと値を追加
    postData("name") = "鈴木 一郎"
    postData("age") = 25
    
    ' 配列用のオブジェクトを「Collection」で準備
    Set skillsCollection = New Collection
    
    ' Collectionにデータを追加
    skillsCollection.Add "Word"
    skillsCollection.Add "PowerPoint"
    
    ' 親オブジェクトにCollectionを追加
    postData.Add "skills", skillsCollection

    ' DictionaryをJSON文字列に変換
    jsonString = ConvertToJson(postData)

    ' 結果をイミディエイトウィンドウに出力
    Debug.Print jsonString
    ' 想定される出力: {"name":"鈴木 一郎","age":25,"skills":["Word","PowerPoint"]}

    ' オブジェクトの解放
    Set postData = Nothing
    Set skillsCollection = Nothing

End Sub

この jsonString をWeb APIに送信することで、VBAで作成したデータをサーバーに送ることができます

あとがき

「VBA-JSON」ライブラリを使えば、これまでVBAでは難しかったJSONの扱いが非常に簡単になります。

  • JSONを解析するなら ParseJson
  • JSONを生成するなら ConvertToJson

この2つの関数を覚えるだけで、Web APIとの連携など、VBAでできることの幅が大きく広がります。ぜひ活用してみてください!

コメント

  1. TK より:

    お世話になります。
    パース後のjson処理で、連想配列に
    name | 眼鏡
    名前 | ○×

    という形に格納することはできますか?

    • ジャベ雄 ジャベ雄 より:

      ニュアンスが掴み切れていないのですが通例”キー:値”の形にパースされるはずです。
      差し支えなければパース前後のデータサンプル記載してもらえると判断できる気がします。

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