VBAでWebサイトをスクレイピングする方法は主に以下の2通りがあります:

✅ 方法①:InternetExplorerを使う(レガシーだが簡単)
📌 特徴:
- VBAで最も手軽にスクレイピングできる方法
- ただし、IEはWindows 11では非推奨または動作不可
🌐 基本コード(IEを使ってページを開き、データを取得)
Sub スクレイピング_IE版()
Dim ie As Object
Dim html As Object
Dim targetText As String
' IEの起動
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = False
' URLを開く
ie.Navigate "https://example.com"
' ページの読み込み完了を待つ
Do While ie.Busy Or ie.ReadyState <> 4
DoEvents
Loop
' HTMLを取得
Set html = ie.Document
' 例:特定のタグの中身を取得(最初の <h1> のテキストなど)
targetText = html.getElementsByTagName("h1")(0).innerText
' 結果を表示
MsgBox "取得したテキスト:" & targetText
' 終了処理
ie.Quit
Set ie = Nothing
Set html = Nothing
End Sub
✅ 方法②:XMLHTTPでHTMLだけ取得する(高速・軽量)
📌 特徴:
- ブラウザを開かずにHTMLソースを取得
- JavaScriptで生成されるページには非対応
- シンプルなページやAPIには最適
🌐 基本コード(XMLHTTP)
Sub スクレイピング_XMLHTTP()
Dim http As Object
Dim html As Object
Dim text As String
' HTTPリクエストの準備
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://example.com", False
http.Send
' HTMLを読み込み
Set html = CreateObject("HTMLfile")
html.body.innerHTML = http.responseText
' 例:最初の <h1> 要素のテキストを取得
text = html.getElementsByTagName("h1")(0).innerText
MsgBox "取得したテキスト:" & text
Set http = Nothing
Set html = Nothing
End Sub
✅ HTML解析の便利な関数(例:特定のクラス名のタグを取る)
Function GetElementByClassName(doc As Object, className As String) As Object
Dim el As Object
For Each el In doc.getElementsByTagName("*")
If el.className = className Then
Set GetElementByClassName = el
Exit Function
End If
Next
Set GetElementByClassName = Nothing
End Function
✅ よく使うHTML要素取得メソッド
VBAメソッド | 内容例 |
---|---|
getElementById("id") | id属性が一致する要素を取得 |
getElementsByTagName("tag") | タグ名が一致する要素を配列で取得 |
getElementsByClassName("class") | クラス名が一致する要素(IEでは非対応) |
✅ 注意点・対策
課題 | 対処方法 |
---|---|
JavaScriptで動的に表示 | IEを使う(またはSeleniumなどを使用) |
ログインが必要なページ | Cookie対応、ログイン処理の自動化 |
アクセス制限(403エラー等) | User-Agent を偽装する |
セキュリティの都合で使用不可 | APIがあればAPI利用を検討 |
✅ 補足:Seleniumを使えばChrome操作も可能(中級者向け)
IEの代わりにChromeなどを操作するには、Selenium Basic という無料ライブラリを使う方法もあります。
必要であれば、Selenium版のスクレイピングコードもご案内できます。
🔚 まとめ
方法 | 特徴 | 向いているケース |
---|---|---|
InternetExplorer | 簡単・JS対応 | 見たままの画面を処理したい場合 |
XMLHTTP + HTMLfile | 軽量・高速 | 静的なHTMLを解析したい場合 |
Selenium(応用) | Chrome対応 | 高機能なスクレイピングが必要な場合 |