「Web APIから取得したデータをExcelで活用したいけど、JSONの扱い方が分からなくて困っている…」
「VBAでJSONを扱うには、何から手をつければいいのだろう?」
そんな悩みを抱えていませんか?
この記事では、VBAを使ってJSONデータを自由自在に操るための方法を、初心者の方にも分かりやすく解説します。ライブラリの選び方から具体的なコードの書き方まで、この1記事でマスターできます。
この記事を読み終える頃には、あなたもVBAでのAPI連携の第一歩を踏み出せるようになっているでしょう。
そもそもJSONとは?VBAで扱うメリットを解説
まずは基本から押さえていきましょう。JSON(ジェイソン)とは、「JavaScript Object Notation」の略で、テキストベースのデータ交換フォーマットです。
{"name": "山田太郎", "age": 30}
上記のように、「キー」と「値」のペアでデータを表現するのが特徴で、人間にとってもプログラムにとっても非常に分かりやすい構造をしています。
以前はXMLという形式もよく使われていましたが、JSONの方が記述がシンプルでデータ量も軽いため、現在のWeb APIではJSONが主流となりました。
VBAでこのJSONを扱えるようになると、さまざまなWebサービスが提供するAPIと連携し、データをExcelシートに直接取り込むことが可能になります。例えば、天気予報、株価、商品情報などを自動で取得し、分析やレポート作成に活かせるようになるのです。手作業でのコピー&ペーストから解放され、業務の幅が大きく広がりますよ。
VBAでJSONを扱うための準備:ライブラリを導入しよう
VBAには、残念ながら標準でJSONを直接読み書きする機能が備わっていません。そこで必要になるのが「ライブラリ」の存在です。ライブラリとは、特定の機能を手軽に実現するために作られた、便利なプログラムの部品集のようなものと考えてください。
VBAでJSONを扱うためのライブラリはいくつか存在しますが、それぞれに特徴があります。ここでは、代表的なものを比較してみましょう。
ライブラリ名 / 手法 | 特徴 | 導入の容易さ | おすすめのユーザー |
---|---|---|---|
VBA-JSON | (本記事で解説) 最も有名で実績が豊富。.NET Frameworkは不要で、参照設定なしでも動作するため導入が非常に手軽。情報も多い。 | 簡単 | 初心者〜中級者 |
有志が作成した別のJsonConverter | .NET Frameworkを利用するため高速な処理が魅力。ただし、参照設定が必要で環境構築のハードルが少し高い。 | 中級 | 処理速度を重視する中級者〜上級者 |
PowerShellを利用 | ライブラリの導入が不要。VBAからPowerShellを呼び出して処理を行うため、環境に依存しにくい。 | 中級 | ライブラリを導入したくない方 |
今回は、この中でも最もポピュラーで、初心者の方でも安心して利用できる「VBA-JSON」を使って解説を進めていきます。導入が簡単で情報も多いため、最初の一つとして最適です。(※名前が似ていますが、.NET Frameworkを必要とする高速なJsonConverterは別のライブラリですのでご注意ください。)
【手順解説】VBA-JSONライブラリのインストール方法
それでは、実際に「VBA-JSON」を導入していきましょう。手順はとても簡単なので、一つずつ確実に進めてください。
GitHubからファイルをダウンロード
まずは、開発者向けプラットフォームであるGitHubから、ライブラリのファイルをダウンロードします。
- VBA-JSONのページにアクセス
こちらのURLにアクセスしてください。 - 最新版をダウンロード
ページ中腹にある「Releases」セクションを探し、一番上の最新バージョンのリンクをクリックします。 - ファイルを保存
「Assets」の中から「JsonConverter.bas」というファイル名を探し、クリックしてダウンロードします。分かりやすい場所に保存しておきましょう。
補足:ZIPで一括ダウンロードする方法
ページ上部にある緑色の「Code」ボタンをクリックし、「Download ZIP」を選択してプロジェクト全体をダウンロードすることもできます。その場合は、ダウンロードしたZIPファイルを解凍し、中にあるJsonConverter.basファイルを使用してください。
VBAエディタにファイルをインポート
次に、ダウンロードしたファイルをExcelのVBAエディタに取り込みます。
- VBAエディタを開く
Excelを開き、「Alt + F11」キーを押してVBAエディタ(VBE)を起動します。 - ファイルをインポート
メニューから「ファイル」→「ファイルのインポート」を選択し、先ほどダウンロードした「JsonConverter.bas」を選んで「開く」をクリックします。 - 確認
左側のプロジェクトエクスプローラーに「標準モジュール」が追加され、その中に「JsonConverter」が表示されていれば準備完了です。
これだけで、あなたのVBA環境でJSONを扱う準備が整いました。参照設定などの難しい手順が不要なのが、VBA-JSONの嬉しいポイントですね。
実践!VBAでJSONをパース(解析)する基本コード
ライブラリの準備ができたので、いよいよJSONデータをVBAで扱っていきましょう。「パース」とは、JSON形式のテキストデータをプログラムで扱える形式(オブジェクト)に変換することを指します。
簡単なJSON文字列をパースしてみよう
まずは、シンプルなJSONデータを使って基本の形をマスターします。
Sub ParseSimpleJson()
Dim jsonText As String
Dim parsedJson As Object
' サンプルのJSON文字列
jsonText = "{""name"": ""佐藤一郎"", ""age"": 28, ""isMember"": true}"
' JSONをパースしてDictionaryオブジェクトに変換
Set parsedJson = JsonConverter.ParseJson(jsonText)
' キーを指定して値を取得し、イミディエイトウィンドウに出力
Debug.Print "名前: " & parsedJson("name")
Debug.Print "年齢: " & parsedJson("age")
Debug.Print "メンバー: " & parsedJson("isMember")
End Sub
このコードを実行すると、VBAエディタのイミディエイトウィンドウ(表示されていない場合はCtrl+Gで表示)に各値が出力されます。
ポイントはJsonConverter.ParseJson()
の部分です。この一行で、ただの文字列だったJSONデータが、VBAでおなじみのDictionaryオブジェクトに変換されました。あとは、オブジェクト名("キー名")
という形で簡単にデータを取り出すことができるのです。
ネスト(入れ子)されたJSONデータを読み解く
次に、もう少し複雑な階層構造を持つJSONデータを扱ってみましょう。
Sub ParseNestedJson()
Dim jsonText As String
Dim parsedJson As Object
Dim skill As Variant
' ネストされたJSON文字列
jsonText = "{""user"":{""id"":101,""name"":""鈴木花子""},""skills"":[""Excel"",""Word"",""VBA""]}"
Set parsedJson = JsonConverter.ParseJson(jsonText)
' 階層をたどって値を取得
Debug.Print "ID: " & parsedJson("user")("id")
Debug.Print "名前: " & parsedJson("user")("name")
' 配列(Collection)のデータをループで処理
Debug.Print "スキル:"
For Each skill In parsedJson("skills")
Debug.Print " - " & skill
Next skill
End Sub
"user"
のように値がさらに{}
で囲まれている場合、parsedJson("user")("id")
のように続けてキーを指定することで、内側のデータにアクセスできます。また、"skills"
のように[]
で囲まれたデータはCollectionとして扱われるため、For Each
ループを使って一つずつ取り出すのが定石です。この2つのパターンを覚えれば、ほとんどのJSONデータは攻略できます。
VBAでJSONを生成(作成)する方法
データの読み込みだけでなく、VBAからJSONデータを生成することも重要です。例えば、Web APIにデータを送信する際に、指定されたJSONフォーマットを作成する必要があります。
DictionaryオブジェクトからJSON文字列を作成
VBAで管理しているデータをJSON形式に変換するには、パースの逆の操作を行います。まずDictionaryオブジェクトにデータを格納し、それをJSON文字列に変換するのが最も簡単で確実な方法です。
Sub CreateJsonString()
' 送信するデータを作成するための親Dictionary
Dim data As Object
Set data = CreateObject("Scripting.Dictionary")
' ユーザー情報を作成するための子Dictionary
Dim user As Object
Set user = CreateObject("Scripting.Dictionary")
' データを格納
user.Add "name", "高橋三郎"
user.Add "email", "takahashi@example.com"
data.Add "user", user
' 注文IDを追加
data.Add "orderId", "A001-B002"
' DictionaryオブジェクトをJSON文字列に変換
Dim jsonString As String
jsonString = JsonConverter.ConvertToJson(data)
' 生成されたJSON文字列を出力
Debug.Print jsonString
End Sub
このコードでは、まずCreateObject("Scripting.Dictionary")
でDictionaryオブジェクトを作成し、Add
メソッドでキーと値を追加していきます。入れ子構造も、別のDictionaryオブジェクトを作成して追加すればOKです。最後にJsonConverter.ConvertToJson()
を使うことで、美しいJSON形式の文字列が生成されます。API連携でデータをPOST(送信)する際などに、このテクニックが非常に役立ちます。
よくあるエラーとその他の注意点
最後に、VBAでJSONを扱う際につまずきやすいエラーとその対処法、さらに知っておくと役立つ注意点をいくつか紹介します。
「コンパイルエラー:SubまたはFunctionが定義されていません」
このエラーは、JsonConverter
モジュールが正しくインポートできていない場合に発生します。
- 対処法:VBAエディタのプロジェクトエクスプローラー内に「JsonConverter」という標準モジュールが存在するか確認してください。もし無ければ、「【手順解説】VBA-JSONライブラリのインストール方法」の手順に従って、再度ファイルをインポートしましょう。
「型が一致しません」という実行時エラー
JsonConverter.ParseJson()
を実行した際にこのエラーが出る場合、引数に渡しているJSON文字列の形式が正しくない可能性が高いです。
- 対処法:JSON文字列の形式が正しいか、まず確認しましょう。
- ダブルクォーテーションのエスケープ: VBAの文字列内で
"
を表現するには、""
と2つ重ねる必要があります。 - 記号の整合性: 末尾のカンマ(
,
)のつけ忘れや、{}
や[]
の閉じ忘れがないかチェックしましょう。オンラインのJSONチェッカーサイトなどで検証するのも有効です。
- 文字化け: APIから取得した日本語などのマルチバイト文字が文字化けしていると、正しく解析できません。データの取得方法や文字コード(UTF-8など)の設定を見直してください。
- BOMの存在: テキストファイルからJSONを読み込んでいる場合、ファイルの先頭にBOM(Byte Order Mark)が付いているとエラーになることがあります。BOMなし形式でファイルを保存し直す必要があります。
- ダブルクォーテーションのエスケープ: VBAの文字列内で
ネストされたデータにアクセスするとエラーになる
例えば、parsedJson("user")("id")
のようなコードでエラーが出る場合、そもそもparsedJson("user")
というキーが存在しない、あるいはその値がオブジェクトではない可能性があります。
- 対処法:Debug.Printなどを使って、一つ前の階層のオブジェクトが正しく取得できているか、ステップ実行(F8キー)で変数の中身を確認しながら進めるのが確実です。慌てずに、一つずつ階層をたどって原因を特定しましょう。
大量のデータを扱う際のパフォーマンスに関する注意
VBA-JSONは非常に手軽で便利なライブラリですが、純粋なVBAで実装されているため、処理速度は最速ではありません。数万件におよぶような巨大なJSONデータを扱う場合、解析に時間がかかってしまう可能性があります。もしパフォーマンスが要件となる場合は、.NET Frameworkを利用する別の高速なライブラリや、PowerShellを利用する方法などを検討すると良いでしょう。
Web API利用時のセキュリティについて
Web APIを利用して外部からデータを取得する際は、そのデータソースが信頼できるものであることを必ず確認してください。悪意のあるサイトから取得したデータを安易に処理すると、意図しない動作を引き起こす原因となり得ます。特に、個人情報や機密情報を扱うシステムと連携する場合は、APIの提供元や通信の安全性(HTTPSなど)について十分に注意を払うことが重要です。
【初心者でも簡単】分散の求め方をわかりやすく解説|手計算・Excel・Pythonにも対応
まとめ
今回は、VBAでJSONを扱うための基礎から応用までを、ライブラリ「VBA-JSON」を使って解説しました。
- JSONは現在のWeb APIの主流なデータ形式
- VBAでJSONを扱うにはライブラリの導入が必要
- VBA-JSONは初心者でも簡単に導入・利用できる
ParseJson
でJSONを読み込み、ConvertToJson
でJSONを生成する- データはDictionaryとCollectionとして扱える
JSONを自在に操れるようになれば、VBAを使った業務自動化の可能性は無限に広がります。ぜひこの記事を参考に、さまざまなAPIと連携して、あなたのExcel業務をさらに進化させてみてください。
Terraform vs Pulumi vs AWS CDK:Infrastructure as Code最新比較と使い分け