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

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

主な機能

WinHttpRequestオブジェクト

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

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

WinHTTPライブラリの参照設定

VBAエディタを開く:Excelで Alt + F11 を押してVBAエディタを開きます。

参照設定を開く:VBAエディタで ツール メニューをクリックし、 参照設定 を選択します。

WinHTTPライブラリを選択:リストから「Microsoft WinHTTP Services, version 5.1」にチェックを入れます。リストに表示されていない場合は、下にスクロールして探してください。

    以下の例では、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をコピーしました