VBA スクレイピング

未分類

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対応高機能なスクレイピングが必要な場合
タイトルとURLをコピーしました