Excel VBAのWinHTTPライブラリ:インターネット通信を自動化する強力なツール

Excel VBAのWinHTTPライブラリは、インターネット通信を行うための強力なツールです。このライブラリを使用することで、HTTPリクエストを送信し、WebサービスやAPIからデータを取得したり、Webサーバーにデータを送信したりすることが可能です。以下に、WinHTTPライブラリの主要な機能とそれらを活用した実用例を説明します。

主な機能

WinHttpRequestオブジェクト

HTTPリクエストを作成し、Webサーバーと通信するためのオブジェクトです。GET、POST、PUT、DELETEなどのHTTPメソッドを使用してリクエストを送信できます。

例題1: HTTP GETリクエストを送信してデータを取得

以下の例では、WinHTTPライブラリを使用してHTTP GETリクエストを送信し、Webサービスからデータを取得する方法を示します。

Sub GetRequestExample()
    ' WinHTTPライブラリの参照設定が必要
    ' 参照設定: Microsoft WinHTTP Services, version 5.1

    Dim httpRequest As WinHttp.WinHttpRequest
    Dim url As String
    Dim response As String

    url = "https://api.exchangerate-api.com/v4/latest/USD"

    ' WinHttpRequestオブジェクトの作成
    Set httpRequest = New WinHttp.WinHttpRequest

    ' HTTP GETリクエストの設定
    httpRequest.Open "GET", url, False
    httpRequest.send

    ' サーバーの応答を取得
    response = httpRequest.ResponseText

    ' 応答をメッセージボックスに表示
    MsgBox response, vbInformation, "Webサービスからの応答"

    ' Excelシートにデータを表示
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets(1)
    ws.Cells(1, 1).Value = response

    ' リソースの解放
    Set httpRequest = Nothing
End Sub

このコードでは、WinHttpRequestオブジェクトを使用してWebサービスから為替レートデータを取得し、その応答をメッセージボックスに表示し、Excelシートに書き込んでいます。

例題2: HTTP POSTリクエストを送信してデータを送信

次に、WinHTTPライブラリを使用してHTTP POSTリクエストを送信し、サーバーにデータを送信する方法を示します。

Sub PostRequestExample()
    ' WinHTTPライブラリの参照設定が必要
    ' 参照設定: Microsoft WinHTTP Services, version 5.1

    Dim httpRequest As WinHttp.WinHttpRequest
    Dim url As String
    Dim postData As String
    Dim response As String

    url = "https://jsonplaceholder.typicode.com/posts"
    postData = "{""title"":""foo"",""body"":""bar"",""userId"":1}"

    ' WinHttpRequestオブジェクトの作成
    Set httpRequest = New WinHttp.WinHttpRequest

    ' HTTP POSTリクエストの設定
    httpRequest.Open "POST", url, False
    httpRequest.setRequestHeader "Content-Type", "application/json"
    httpRequest.send postData

    ' サーバーの応答を取得
    response = httpRequest.ResponseText

    ' 応答をメッセージボックスに表示
    MsgBox response, vbInformation, "サーバーからの応答"

    ' Excelシートにデータを表示
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets(1)
    ws.Cells(1, 1).Value = response

    ' リソースの解放
    Set httpRequest = Nothing
End Sub

このコードでは、WinHttpRequestオブジェクトを使用してHTTP POSTリクエストを送信し、JSONデータをサーバーに送信しています。サーバーからの応答をメッセージボックスに表示し、Excelシートに書き込んでいます。

例題3: HTTPリクエストのエラーハンドリング

次に、HTTPリクエストを送信する際のエラーハンドリングの方法を示します。

Sub GetRequestWithErrorHandling()
    ' WinHTTPライブラリの参照設定が必要
    ' 参照設定: Microsoft WinHTTP Services, version 5.1

    Dim httpRequest As WinHttp.WinHttpRequest
    Dim url As String
    Dim response As String

    On Error GoTo ErrorHandler

    url = "https://api.exchangerate-api.com/v4/latest/USD"

    ' WinHttpRequestオブジェクトの作成
    Set httpRequest = New WinHttp.WinHttpRequest

    ' HTTP GETリクエストの設定
    httpRequest.Open "GET", url, False
    httpRequest.send

    ' サーバーの応答を取得
    response = httpRequest.ResponseText

    ' 応答をメッセージボックスに表示
    MsgBox response, vbInformation, "Webサービスからの応答"

    ' Excelシートにデータを表示
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets(1)
    ws.Cells(1, 1).Value = response

    ' リソースの解放
    Set httpRequest = Nothing
    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical, "エラー"
    Set httpRequest = Nothing
End Sub

このコードでは、エラーハンドリングを追加して、HTTPリクエストが失敗した場合にエラーメッセージを表示します。

例題4: API認証を伴うHTTPリクエストの送信

最後に、API認証が必要なHTTPリクエストを送信する方法を示します。

Sub GetRequestWithAuthentication()
    ' WinHTTPライブラリの参照設定が必要
    ' 参照設定: Microsoft WinHTTP Services, version 5.1

    Dim httpRequest As WinHttp.WinHttpRequest
    Dim url As String
    Dim apiKey As String
    Dim response As String

    url = "https://api.example.com/data"
    apiKey = "YOUR_API_KEY"

    ' WinHttpRequestオブジェクトの作成
    Set httpRequest = New WinHttp.WinHttpRequest

    ' HTTP GETリクエストの設定
    httpRequest.Open "GET", url, False
    httpRequest.setRequestHeader "Authorization", "Bearer " & apiKey
    httpRequest.send

    ' サーバーの応答を取得
    response = httpRequest.ResponseText

    ' 応答をメッセージボックスに表示
    MsgBox response, vbInformation, "Webサービスからの応答"

    ' Excelシートにデータを表示
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets(1)
    ws.Cells(1, 1).Value = response

    ' リソースの解放
    Set httpRequest = Nothing
End Sub

このコードでは、WinHttpRequestオブジェクトを使用してAPIキーを含むHTTP GETリクエストを送信し、認証が必要なWebサービスからデータを取得しています。

結論

WinHTTPライブラリを使用することで、Excel VBAから直接インターネット通信を行い、WebサービスやAPIと連携することが可能です。WinHttpRequestオブジェクトを適切に使用することで、HTTP GET、POSTリクエストの送信やエラーハンドリング、API認証などの操作が効率的に行えます。このライブラリを駆使することで、データ取得や送信の自動化が飛躍的に向上し、業務効率化に大いに貢献します。

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