【VBAリファレンス】VBAとSeleniumBasicで実現する!完全自動化された検索順位チェッカーの構築術

スポンサーリンク

概要

Excel VBAは業務効率化の強力な武器ですが、標準機能だけでは「動的なWebサイト」の操作には限界があります。特に、Google検索結果のような、JavaScriptで動的にコンテンツが生成されるページからのデータ抽出は、VBAの標準的なHttpRequestやDOM操作では困難です。そこで登場するのが「SeleniumBasic」です。本稿では、VBAとSeleniumBasicを組み合わせ、ブラウザを自動操作して検索順位を自動取得するツールの構築手法を詳細に解説します。外部ツールをVBAから制御することで、あなたのExcelは単なる表計算ソフトから、強力なWebスクレイピングエンジンへと進化します。

SeleniumBasic導入の重要性と環境構築

SeleniumBasicは、WebDriverを介してChromeやEdgeなどのブラウザをVBAから制御するためのライブラリです。まずは、公式GitHubからSeleniumBasicをダウンロードし、インストールを行います。次に、使用するブラウザに対応したWebDriver(例:chromedriver.exe)をダウンロードし、SeleniumBasicのインストールフォルダに配置する必要があります。

VBAエディタ(VBE)を開き、「ツール」メニューの「参照設定」から「Selenium Type Library」にチェックを入れることで、VBAからSeleniumのオブジェクトを利用できるようになります。この環境構築が、自動化の第一歩となります。ここでの最大のポイントは、WebDriverのバージョンとブラウザのバージョンを常に一致させることです。バージョン不一致はエラーの最大の要因ですので、定期的なメンテナンスを意識してください。

検索順位チェッカーのロジック詳細

検索順位チェッカーを構築する際、重要なロジックは以下の4ステップです。

1. WebDriverの初期化とブラウザの起動
2. Google検索窓へのクエリ入力と検索実行
3. 検索結果ページからのDOM要素の取得と解析
4. 指定したドメインが含まれる順位の特定と記録

通常のスクレイピングと異なり、Googleの検索結果は広告枠や強調スニペットなど、順位計算を複雑にする要素が多数存在します。これらを回避するためには、CSSセレクタを的確に指定し、メインの検索結果リスト(通常は「div.g」クラスなど)のみをターゲットにする必要があります。また、Googleのボット対策(CAPTCHA)を考慮し、検索間隔に一定の待機時間(Thread.Sleep)を設けることが、安定稼働の鍵となります。

サンプルコード:検索順位取得の核心部分

以下のコードは、指定したキーワードで検索を行い、検索結果の1ページ目から特定のドメインが含まれる順位を抽出する基本的な構造です。


Sub GetSearchRanking()
    Dim driver As New Selenium.ChromeDriver
    Dim results As Selenium.WebElements
    Dim result As Selenium.WebElement
    Dim targetDomain As String
    Dim keyword As String
    Dim i As Integer
    Dim found As Boolean
    
    targetDomain = "example.com"
    keyword = "VBA スクレイピング"
    found = False
    
    ' ブラウザ起動
    driver.Start "chrome"
    driver.Get "https://www.google.com"
    
    ' 検索実行
    driver.FindElementByName("q").SendKeys keyword & Keys.Enter
    driver.Wait 2000 ' 読み込み待機
    
    ' 検索結果取得(CSSセレクタで指定)
    Set results = driver.FindElementsByCss("div.g")
    
    ' 順位調査
    For i = 1 To results.Count
        If InStr(results(i).Text, targetDomain) > 0 Then
            MsgBox targetDomain & " は " & i & " 位にランクインしています。"
            found = True
            Exit For
        End If
    Next i
    
    If Not found Then MsgBox "1ページ目には見つかりませんでした。"
    
    driver.Quit
End Sub

DOM解析と待機処理の最適化

上記のコードはあくまで基本形です。実務では、Webサイトの読み込み速度が一定ではありません。ブラウザが完全にレンダリングを終える前に要素を探しに行くと、「NoSuchElementException」が発生します。これを防ぐためには、「ImplicitWait」や「ExplicitWait」を適切に設定することが不可欠です。

特に「ExplicitWait」は、特定の条件(要素が存在するまで待つ、要素がクリック可能になるまで待つなど)を満たすまで処理を停止するため、非常に堅牢なスクリプトを作成できます。また、検索順位チェッカーにおいては、ページネーション(次ページへの遷移)を考慮し、ループ処理で「次のページ」ボタンをクリックする機能を実装することで、10位以下の順位も計測可能になります。

実務アドバイス:クローラーとしてのマナーと制限

VBAで検索順位チェッカーを作成する場合、技術的な実現可能性以上に重要なのが「Web利用の倫理」です。Googleのような検索エンジンに対して高速かつ大量のアクセスを行うと、IPアドレスが一時的にブロックされるリスクがあります。

1. 待機時間のランダム化:Thread.Sleep(2000)を固定値にするのではなく、Randomize関数を用いて2秒から5秒の範囲で変動させることで、機械的なアクセスではないことを擬似的に演出します。
2. ユーザーエージェントの偽装:必要に応じて、AddArgument(“–user-agent=…”)を設定し、ブラウザからのアクセスであることを明確にします。
3. 稼働時間の管理:業務時間外や深夜に自動実行する際は、タスクスケジューラを活用し、PCの電源管理と合わせて自動化するのがプロの運用スタイルです。

また、頻繁にサイト構造が変更されるため、CSSセレクタはハードコーディングせず、別シートに管理表を作成して「設定ファイル」として読み込む設計にすると、メンテナンスコストが劇的に下がります。

まとめ

VBAとSeleniumBasicを組み合わせることで、検索順位の調査といった手間のかかる定型業務を、Excelから離れることなく全自動化することが可能になります。重要なのは、単に「動くものを作る」ことではなく、「エラーを許容し、自己修復・待機処理を考慮した堅牢なシステム」を設計することです。

本稿で解説した手法を基礎として、さらにログ出力機能や、結果をデータベース化する機能を追加していくことで、あなたの業務環境は飛躍的に効率化されるはずです。VBAは決して古い言語ではありません。適切な外部ライブラリを組み合わせることで、現代のWeb環境下でも最前線で活躍し続けることができるのです。さあ、今すぐあなたのExcelを、プロフェッショナルな順位計測マシンへと作り替えてみてください。

タイトルとURLをコピーしました