Excel VBA と SeleniumBasic で Microsoft Edge から任意要素を抽出する方法

目次

はじめに

Windows 10 以降では Internet Explorer の自動操作が推奨されておらず、Microsoft Edge を用いたスクレイピングが主流です。本記事では SeleniumBasicEdgeDriver を使用し、ページ読み込み後に特定クラスの要素を取得して Excel シートへ書き込む手順を解説いたします。例としてサイト https://morinokabu.com/ を対象とします。


前提環境

項目内容
OSWindows 10 / 11
ExcelMicrosoft 365 または Excel 2016 以降
追加ツールSeleniumBasic(VBA ラッパー)
ドライバmsedgedriver.exe(Edge のバージョンに合わせて入手)
  1. SeleniumBasic をインストールします(既定先は C:\SeleniumBasic)。
  2. Edge のバージョンに一致する msedgedriver.exe をダウンロードし、同フォルダーに配置します。
  3. VBA エディターで [ツール] → [参照設定] → “Selenium Type Library” を有効にします。

サンプルコード

Option Explicit     ' 参照設定: Selenium Type Library が必要です

Sub ScrapeMorinokabuData()

    Dim siteURL    As String
    Dim driver     As New Selenium.EdgeDriver
    Dim itemList   As Selenium.WebElements
    Dim element    As Selenium.WebElement
    Dim rowIndex   As Long
    
    siteURL = "https://morinokabu.com/"
    
    ' Edge 起動
    driver.Start
    driver.Get siteURL
    
    ' ページ読み込み完了待機
    Do While driver.ExecuteScript("return document.readyState") <> "complete"
        DoEvents
    Loop
    
    ' クラス名 "data" を持つ要素群を取得
    Set itemList = driver.FindElementsByCss(".data")
    
    rowIndex = 1
    For Each element In itemList
        ' 列 A: 最初の子要素テキスト
        Cells(rowIndex, 1).Value = element.FindElementsByCss("*")(0).Text
        
        ' 列 B: 3 番目の <p> 要素の HTML
        Cells(rowIndex, 2).Value = _
            element.FindElementsByTag("p")(2).Attribute("outerHTML")
        
        ' 列 C: 最初の <a> 要素の href
        Cells(rowIndex, 3).Value = _
            element.FindElementsByTag("a")(0).Attribute("href")
        
        rowIndex = rowIndex + 1
    Next element
    
    driver.Quit

End Sub

コード解説

処理説明
driver.ExecuteScript("return document.readyState")JavaScript で読み込み状態を確認します。"complete" になるまでループします。
FindElementsByCss(".data")CSS セレクターでクラス data を持つ要素群を取得します。
FindElementsByCss("*")(0)取得した要素の最初の子要素を参照します。
Attribute("outerHTML")要素自身を含む HTML 文字列を取得します。
Attribute("href")<a> 要素のリンク先を取得します。

主な DOM アクセス手段と用途

メソッド取得対象
FindElementById("id名")一意の ID を持つ要素を取得
FindElementsByName("name属性")指定 name を持つ要素群を配列取得
FindElementsByClass("class名")指定クラスを持つ要素群を配列取得
FindElementsByTag("tag名")指定タグ名を持つ要素群を配列取得

取得後は InnerText, Attribute(“outerHTML”), Attribute(“src”) などを組み合わせて情報を抽出できます。


応用アイデア

  1. 可変待機時間
    driver.Wait 10000, "css=.data" で最大 10 秒待機し、要素が現れ次第処理を継続できます。
  2. スクロールが必要なページ
    driver.ExecuteScript "window.scrollTo(0, document.body.scrollHeight);" で最下部まで読み込ませてから要素を検索します。
  3. 複数ページ巡回
    URL を配列化し、ループで driver.Get を呼び出すと大量ページを順次処理できます。

まとめ

SeleniumBasic と EdgeDriver を併用することで、Excel VBA でも Microsoft Edge の DOM へ直接アクセスし、任意の要素を抽出できます。旧来の IE 自動化コードを移行する際は、FindElement 系メソッドと JavaScript 待機ロジックを組み合わせると安定して動作します。社内レポートやデータ収集の自動化にぜひご活用ください。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次