わたろぐ

仕事、読書、ガジェット、グルメ、写真、旅行など雑多な備忘

【Excel】【VBA】HTTPリクエストを送信してステータスコードを取得する

複数のURLに対してGETリクエストを送信するというツールを作ったのでメモ。 今回はリクエストに対し、レスポンスのステータスコードを取得することにした。

A列にURLをセットし実行すると、B列にステータスコードがセットされる、というマクロ。

Sub Sample()

    Dim i As Long
    Dim bottom As Long
  
    '最下行を取得
    bottom = Range("A65536").End(xlUp).Row
  
    '最下行まで繰り返し
    For i = 1 To bottom
    
        'A列のURLに対し、
        'ステータスコードをB列にセット
        Range("B" & i) = GetWebStatus(Range("A" & i))
  
    Next i
  
End Sub

Function GetWebStatus(URL As String) As String

    Dim WinHttp As Object

    '"WinHttp.WinHttpRequest.5.1"ではうまくいかなかったため
    '"MSXML2.XMLHTTP"を利用
    'Set WinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
    Set WinHttp = CreateObject("MSXML2.XMLHTTP")

On Error GoTo INVALID

    
    WinHttp.Open "GET", URL, False
    WinHttp.send  'GETリクエストを送信

    GetWebStatus = WinHttp.Status  'ステータスコードをセット
  
    Set WinHttp = Nothing
  
    Exit Function
  
INVALID:
    GetWebStatus = "Invalid URL"
  
    Set WinHttp = Nothing
  
End Function

実行後のイメージは以下のような感じ。 参考:http://okwave.jp/qa/q5474619.html