Visual Basic for Applications:
HTTPリクエストの送信

方法:

VBA で HTTP リクエストを送信する鍵は、Microsoft XML, v6.0 ライブラリ(またはシステムに応じて古いバージョン)の利用です。まず、VBA エディタのツール > 参照 に移動し、Microsoft XML, v6.0 が有効になっていることを確認してください。

ここに、単純な HTTP GET リクエストを送信する方法を示します:

Dim httpRequest As Object
Set httpRequest = CreateObject("MSXML2.XMLHTTP.6.0")

With httpRequest
    .Open "GET", "https://api.example.com/data", False
    .send
    If .Status = 200 Then
        Debug.Print .responseText
    Else
        Debug.Print "Error: " & .Status & " - " & .statusText
    End If
End With

データ(例えば、JSON)をサーバーに送信する必要がある POST リクエストの場合は以下の通りです:

Dim httpRequest As Object, postData As String
Set httpRequest = CreateObject("MSXML2.XMLHTTP.6.0")
postData = "{""key"":""value""}"

With httpRequest
    .Open "POST", "https://api.example.com/submit", False
    .setRequestHeader "Content-Type", "application/json"
    .send postData
    If .Status = 200 Then
        Debug.Print .responseText
    Else
        Debug.Print "Error: " & .Status & " - " & .statusText
    End If
End With

成功したリクエストのサンプル出力は、対話している API や Web ページに応じて、JSON 文字列または HTML ページになることがあります:

{"data": "This is the response from the server"}

深掘り

ここで紹介した方法は、MSXML2.XMLHTTP オブジェクトを利用します。これは Microsoft XML Core Services (MSXML) の一部であり、VBA 開発者が XML ベースの操作を行うための方法を提供するために導入され、時間が経つにつれて、直接 XML データを扱わない場合でも HTTP リクエストのための一般的なツールとなりました。古いものであるにも関わらず、VBA における単純な Web インタラクションにおける信頼性のあるオプションとして残っています。

しかしながら、VBA およびその HTTP リクエストメカニズムは、現代のプログラミング環境に見られる堅牢さや柔軟性に欠けています。例えば、非同期リクエストの処理や、高度な HTTP 機能(ウェブソケットやサーバー送信イベントなど)を要求するアプリケーション内での作業は、VBA の範囲外です。より複雑な Web 統合プロジェクトに取り組む際、開発者はしばしば外部ライブラリやツールを利用したり、ウェブスクレイピング技術を通じてブラウザの挙動を自動化したりしますが、これらは解決策というよりは回避策です。

Python の requests ライブラリや Node.js 上で動作する JavaScript のような言語や環境は、非同期操作、JSON の扱いの容易さ、さまざまな Web 技術に対する広範なサポートを含む、より強力で多様な HTTP リクエスト機能を箱から出してすぐに提供します。より洗練された Web インタラクションを必要とするタスクには、Microsoft のエコシステムに深く根ざした開発者は、.NET の広範なネットワークプログラミング機能を活用するために PowerShell や C# への移行を検討するかもしれません。

したがって、VBA の HTTP リクエスト機能は単純なクエリやデータ取得タスクには適していますが、プロジェクトの要求が複雑で現代的な Web 環境に向かうにつれて、代替案を探求することが重要になります。