Excel VBAでEdgeを操作する方法をお探しですね。

広告

Excel VBAでEdgeスクレイピング入門──WebDriver不要でどこまでできる?

Excel VBAでWebスクレイピングを始めようとすると、多くの人が「SeleniumBasic」「EdgeDriver」「WebDriverのバージョン管理」という壁にぶつかります。

特にMicrosoft Edgeは勝手に更新されるので、昨日まで動いていたマクロが今日になって突然エラーを吐く…なんてことも珍しくありません。

この記事では、「そもそもWebDriverって必須なの?」という視点から、Excel VBAでEdgeを使ったスクレイピングの基本をわかりやすく解説します。

SeleniumやWebDriverを使う場合との違いも整理しながら、自分に合った方法を選べるようになることを目指しましょう。

1. WebDriver不要でスクレイピングってできるの?

**結論から言うと、できます。

**ただし、すべてのケースで使えるわけではありません。

WebページのHTMLを取得して、その中から欲しいデータを抜き出すだけなら、VBAの標準機能やWindowsに最初から入っているHTTP通信機能だけで対応できることがあります。

たとえば、ログイン不要で公開されているニュース一覧、価格表、ランキングページなどは、わざわざブラウザを起動しなくてもHTMLを取ってこられるケースが多いです。

この方法の良いところは、**EdgeDriverの更新を気にしなくていい**、**SeleniumBasicをインストールしなくていい**という点です。

会社のPCで勝手にソフトを入れられない環境でも使いやすいのが魅力ですね。

ただし注意点も

「Microsoft Edgeを操作する」という言葉には少し注意が必要です。

もしあなたが「VBAからEdgeの画面を開いて、ボタンをクリックして、入力欄に文字を入れて、ログインした後のページを見て回りたい」と思っているなら、単純なHTTP取得だけでは厳しいです。

最近のWebサイトはJavaScriptで画面を動的に作っているものが多く、HTMLを取得しただけでは肝心のデータが入っていないことがよくあります。

こういう場合に使われるのが、SeleniumBasic、TinySeleniumVBA、EdgeDriver、あるいはEdgeのリモートデバッグ機能です。

つまり「WebDriver不要」は万能ではなく、**取りたいデータの性質によって使い分ける**のがポイントなんです。

スクレイピングには2つのアプローチがある

初心者がまず理解しておきたいのは、スクレイピングには大きく分けて2つの方法があるということです。

1. **ページのデータを直接取りに行く方法**
→ WebDriver不要で実装しやすく、処理も速い

2. **ブラウザを人間の代わりに操作する方法**
→ ログイン、クリック、ページ遷移、ファイルダウンロードなどに強いが、環境構築や待機処理、ブラウザ更新への対応が必要

この記事では、まずWebDriver不要でできる基礎を押さえて、必要に応じてEdge操作へ広げていく流れで説明していきます。

2. WebDriver不要で使える基本技:HTTP取得とHTML解析

WebDriverを使わないVBAスクレイピングの基本は、**ExcelからWebサーバーへHTTPリクエストを送って、返ってきたHTMLを文字列として受け取る**ことです。

代表的なのが「XMLHTTP」や「ServerXMLHTTP」という仕組み。

これを使えば、ブラウザを起動せずにWebページの情報を取得できます。

画面表示を待つ必要がないので、処理がとても速いのが特徴です。

Edgeそのものを操作しているわけではありませんが、結果としてWebページの情報をExcelへ取り込めるので、シンプルなデータ収集なら十分実用的です。

**まずはこの方法で取得できるかを確認して、無理そうならブラウザ操作を検討する**のが効率的ですよ。

サンプルコード

たとえば、こんな感じでページのHTMLを取得できます。

“`vb
Sub GetHtmlSample()
Dim http As Object
Dim url As String
Dim html As String

url = “https://example.com/”
Set http = CreateObject(“MSXML2.XMLHTTP”)

http.Open “GET”, url, False
http.Send

html = http.responseText

ThisWorkbook.Worksheets(1).Range(“A1”).Value = html
End Sub
“`

**注意:**実際に使う場合は、対象サイトの利用規約やrobots.txt、アクセス頻度に気をつけてください。

短時間に大量アクセスすると、相手サーバーに迷惑をかけるだけでなく、自分のIPがブロックされる可能性もあります。

スクレイピングは技術的にできるかだけでなく、**相手サイトのルールを守って実施する**のが大前提です。

取得したHTMLからデータを抜き出す

取得したHTMLから必要な情報を取り出すには、文字列関数、正規表現、HTMLDocumentなどを使います。

単純に特定の文字の前後を抜き出すだけなら`InStr`や`Mid`でも対応できますが、ページ構造が少し変わるだけで壊れやすくなります。

表やリンク、見出しなどを安定して取りたい場合は、HTMLを文書構造として扱う方法を検討するといいでしょう。

ただし、**JavaScriptで後から生成されるデータは`responseText`に含まれない**ことがあります。

その場合は、ページ内で呼び出されているAPIを調べて直接取得するか、Seleniumやリモートデバッグを使ったEdge操作に切り替える判断が必要です。

どんな場面に向いている?

WebDriver不要の方法が向いているのは、**公開ページのテキストや表を定期的に取得したい場面**です。

たとえば、毎朝Excelを開いてWeb上の一覧を取り込んで、加工して社内資料に使うような用途では、ブラウザ操作よりもHTTP取得の方が安定することがあります。

反対に、こんな場合は厳しいです:

– ボタンを押さないと表示されない
– ログイン後でなければ見られない
– 検索条件を画面で入力する必要がある

最初からEdgeを自動操作しようとするのではなく、**「HTTP取得で足りるか」を先に確認する**ことが、VBAスクレイピングを安定させる近道です。

3. Edgeを操作したい場合:リモートデバッグとSelenium系ツール

HTML取得だけでは対応できない場合、Microsoft Edgeを実際に操作する方法を考えます。

従来の方法:SeleniumBasic + EdgeDriver

従来はSeleniumBasicとEdgeDriverを組み合わせる方法がよく使われてきました。

SeleniumBasicを使うと、VBAから「ページを開く」「要素を探す」「クリックする」「文字を入力する」といった操作を比較的わかりやすいコードで書けます。

ただし、**EdgeDriverのバージョンがEdge本体と合っていないとエラーになる**ことがあり、ブラウザ更新のたびに対応が必要になるのが悩みどころです。

TinySeleniumVBAのように、SeleniumBasicをインストールせずVBAモジュールとして導入できる選択肢もありますが、基本的にはWebDriverの存在を前提にした仕組みです。

新しい選択肢:リモートデバッグポート

一方で、**起動済みのEdgeを操作する方法**として「リモートデバッグポート」を使う考え方があります。

Edgeを特定のオプション付きで起動して、外部から操作できる状態にする方法です。

たとえば、こんなコマンドでリモートデバッグ用のEdgeを起動できます。

“`text
“C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe” –remote-debugging-port=9222 –user-data-dir=”C:\Temp_Edge”
“`

この方法のメリットは、**専用のユーザープロファイルを使ってEdgeを起動できる**点です。

ログイン状態やCookieが保持されるサイトなら、毎回ユーザー名やパスワードを入力しなくても済む場合があります。

SeleniumBasicを使う場合でも、`debuggerAddress`を指定することで、すでに起動しているリモートデバッグ用Edgeへ接続できることがあります。

ただし、この場合もSelenium経由で操作するならWebDriverは関係します。

完全にWebDriverを使わずにリモートデバッグを扱うには、Chrome DevTools Protocolという仕組みをVBAからHTTPやWebSocketで呼び出す必要があり、初心者向けとしては難易度が上がります。

現実的な使い分け

実務では、**「WebDriverを完全に排除する」ことにこだわりすぎない方がいい**場面もあります。

– ログイン後のページ操作や複雑なクリック処理が必要なら、SeleniumBasicやTinySeleniumVBAを使った方がコードの見通しがいい
– データ取得だけが目的なら、HTTPリクエストやWeb APIの方が安定する
– リモートデバッグ用Edgeは、ログイン状態を使いたい場合や、通常のSelenium起動では毎回認証が発生して困る場合に有効

Edgeの設定で「スタートアップブースト」や「Edge終了後もバックグラウンドで実行する」項目が影響することもあるので、うまく接続できない場合はブラウザ側の設定確認も必要です。

4. 初心者が失敗しないための判断基準と注意点

Excel VBAからMicrosoft Edgeを使ってスクレイピングする際は、**最初に「何を取得したいのか」を明確にする**ことが大切です。

– ページに表示されている文字が欲しいのか
– ログイン後の一覧を取得したいのか
– 検索フォームに条件を入れて結果を保存したいのか

何を取りたいかで、選ぶ方法は変わります。

判断基準の整理

簡単にまとめると、こんな感じです。

| 状況 | おすすめの方法 |
|——|————–|
| 公開HTMLにデータが含まれる | XMLHTTPなどのWebDriver不要方式を優先 |
| JavaScriptで表示される | APIの有無を確認、難しければブラウザ操作を検討 |
| ログインやクリックが必要 | SeleniumBasic、TinySeleniumVBA、リモートデバッグ用Edge |
| 長期運用する | WebDriver更新、待機処理、エラー時の再実行を設計に入れる |

目的に対して過剰な仕組みを選ばないことが、保守しやすいVBAマクロにつながります。

セキュリティ面の注意

ログインが必要なサイトを自動操作する場合は、セキュリティ面にも注意が必要です。

**VBAコード内にユーザー名やパスワードを直接書くと、ファイル共有時に情報漏えいの原因になります。

**リモートデバッグ用Edgeのプロファイルを使えば、ログイン済み状態を活用できることがありますが、そのプロファイルフォルダ自体の管理も重要です。

共有PCや複数人が触る環境では、Cookieやセッション情報が残ることのリスクも考慮してください。

業務で使う場合は、可能であれば**公式APIや社内で許可されたデータ取得方法を優先する**のが安全です。

待機処理のコツ

待機処理も初心者がつまずきやすいポイントです。

ブラウザ操作では、ページを開いた直後に目的のボタンや入力欄がまだ表示されていないことがあります。

その状態でクリックしようとすると、「要素が見つかりません」エラーになります。

Selenium系ツールでは明示的な待機処理を入れ、TinySeleniumVBAなどではSleep関数を使って処理を一時停止することがあります。

ただし、単純に何秒も待つだけでは、サイトが遅い日やネットワークが不安定な日に失敗する可能性があります。

できれば**「要素が見つかるまで待つ」「一定回数リトライする」**といった考え方を取り入れると、実務で使いやすくなります。

サイト変更への備え

最後に、**スクレイピングは相手サイトの構造変更に弱い**という前提を忘れないようにしましょう。

昨日まで取得できていたCSSセレクタやHTML構造が、サイト改修で突然変わることは珍しくありません。

そのため、Excel側ではエラー時に処理を止めるだけでなく、**どのURLで失敗したのか、どの要素が見つからなかったのかを記録する設計**にしておくと原因調査が楽になります。

まとめ

WebDriver不要の方法、Seleniumを使う方法、リモートデバッグ用Edgeを使う方法には、それぞれ強みがあります。

**まずはHTTP取得で基礎を学んで、必要に応じてEdge操作へ進む**流れで学習すれば、VBAスクレイピングを無理なく実用レベルへ近づけられます。

焦らず、自分の目的に合った方法を選んでいきましょう!

広告