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認証などの操作が効率的に行えます。このライブラリを駆使することで、データ取得や送信の自動化が飛躍的に向上し、業務効率化に大いに貢献します。