VBAでWebページを取得する方法

VBAでWebページを取得する、3つの方法を紹介します。

InternetExplorerオブジェクト (WebBrowserコントロール)

Internet Explorerを起動して、そこからHTMLソースを取得します。

CreateObject("InternetExplorer.Application")IWebBrowser2オブジェクトが作成され、そのNavigate()メソッドでURLを指定することで読み込みが行われます。取得結果はDocumentプロパティに、HTMLDocumentオブジェクトとして格納されます。

Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")

ie.Visible = True
ie.Navigate("http://example.com/")

' ダウンロード待ち
Do While ie.Busy
Loop

' 結果出力
Debug.Print ie.Document.body.innerHTML

ie.Quit
Set ie = Nothing
InternetExplorer Object | MSDN

HTMLDocumentオブジェクト

直接HTMLDocumentオブジェクトを作成します。取得結果もそのままHTMLDocumentとして処理できます。

HTMLDocumentオブジェクトを使用するには、参照設定で[Microsoft HTML Object Library]を参照する必要があります。さもなくば「ユーザ定義型は定義されていません。」としてエラーとなります。

Dim html As MSHTML.HTMLDocument
Set html = New MSHTML.HTMLDocument

Dim document As MSHTML.HTMLDocument
Set document = html.createDocumentFromUrl("http://example.com/", vbNullString)

' ダウンロード待ち
Do While document.readyState <> "complete"
Loop

' 結果出力
Debug.Print document.body.innerHTML

Set html = Nothing
Set document = Nothing
IHTMLDocument4 Interface () | MSDN

XMLHTTPオブジェクト

CreateObject("MSXML2.XMLHTTP")IXMLHTTPRequestオブジェクトが作成されます。取得結果はresponseTextプロパティに、Stringオブジェクトとして格納されます。ちなみにXML文書ならば、responseXMLプロパティでDOMDocumentとして取得できます。

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

http.Open "GET", "http://example.com/", False
http.Send

' ダウンロード待ち
Do While http.readyState <> 4
Loop

' 結果出力
Debug.Print http.responseText

Set http = Nothing
IXMLHTTPRequest | MSDN