jsonはVBAからでも利用できる?
VBAからjsonデータを取り込もう
ここ数年?サーバ間などの通信にjsonを利用するケースが大変多くなっています。ひと2000年ごろはjsonはほとんど利用されていませんでしたが、その後、マイクロソフトのドットネットが登場したころからでしょうか、急速に普及しました。
それまでのプログラム言語でjsonを利用するにはどうしたらいい?
ここではVBAでの利用方法を説明します。それ以外の古い言語を使っている方などにも参考になると思いますので是非ご覧ください。
以下は、VBAのCallByName関数を使ってJSONデータを扱うサンプルです。VBAでは、Microsoft Scripting RuntimeやJSONパーサライブラリを使うことで、JSONデータの読み取り・解析できます。CallByNameを利用することで、JSONオブジェクトのプロパティを動的に参照することができます。
以下、サンプルのjsonデータです。
{
"product": {
"name": "Laptop",
"price": 1200,
"availability": true
}
}
次にCallByNameを使ってJSONのプロパティに動的にアクセスするVBAコードです。
Sub ParseJsonUsingCallByName()
' JSON文字列を準備
Dim jsonString As String
jsonString = "{""product"": {""name"": ""Laptop"", ""price"": 1200, ""availability"": true}}"
' JSONを解析するための辞書オブジェクトを準備
Dim jsonDict As Object
Set jsonDict = JsonConverter.ParseJson(jsonString)
' productオブジェクトを取得
Dim product As Object
Set product = jsonDict("product")
' CallByNameを使って各プロパティにアクセス
Dim propertyName As String
Dim propertyValue As Variant
' 動的にプロパティを取得する
propertyName = "name"
propertyValue = CallByName(product, propertyName, VbGet)
Debug.Print "Product Name: " & propertyValue
propertyName = "price"
propertyValue = CallByName(product, propertyName, VbGet)
Debug.Print "Product Price: " & propertyValue
propertyName = "availability"
propertyValue = CallByName(product, propertyName, VbGet)
Debug.Print "Availability: " & propertyValue
End Sub
いかがでしょうか。
かなり簡単にjsonデータを取得できます。
それでは、少しコードの説明です。
(1)JSON文字列を準備
jsonStringにJSON形式の文字列を格納しています。この文字列にはproductというキーとその詳細情報(名前、価格、在庫の有無)を含むオブジェクトが入っています。
(2)JSONを解析して辞書オブジェクトに変換
JsonConverter.ParseJson(jsonString)を使って、JSON文字列をDictionaryオブジェクトに変換しています。これにより、JSONデータをキーを使ってアクセス可能になります。
(3)プロダクト情報の取得
Set product = jsonDict("product")で、JSON内のproductオブジェクトを取得し、辞書オブジェクトとして操作します。
CallByNameを使ってプロパティに動的にアクセス:
CallByName関数を使って、オブジェクトのプロパティ(name, price, availability)に動的にアクセスします。
CallByName(product, propertyName, VbGet)の形式で、指定したプロパティ名をpropertyName変数で指定し、そのプロパティの値を取得します。
このように動的にプロパティを指定することで、プロパティ名が事前に固定されていない場合でもアクセスが可能です。
(4)デバッグ出力
Debug.Printを使って、取得したプロパティの値を出力しています。これにより、VBAの「即時ウィンドウ」にProduct Name, Product Price, Availabilityが表示されます。
CallByName関数でjsonデータを操作する場合は、上記のサンプルを使うことでほぼ思ったことができるかと思います。
ぜひ利用したことがない方はお試しください。