1 はじめに
SeleniumVBAは、TinySeleniumVBA(作成者は日本の方)をベースに機能を拡張したツールの名称で、GCuser99氏により作成された。プログラム言語のVBAを用いてWebDriverと通信することによりWEBブラウザの操作を自動化できる。
SeleniumVBAの用語は様々な意味で使われることがあるが、ここではGCuser99氏によるツールの名称をSeleniumVBAと定義している。
VBAを用いてブラウザを操作する他のツールとして、SeleniumBasicおよびZeroInstall BrowserDriver for VBAが挙げられる(下図参照)。
SeleniumBasicとの比較
【メリット】
・インストール不要でExcelで動作するためファイルのやりとりが容易
・サポート切れが心配な.NET Framework3.5の有効化も不要
・WebDriver自動更新機能が標準装備
・バージョンアップ、バグフィックスへの対応あり
・標準モジュールにサンプルコードが多数掲載
・ExecuteCDPによるCDPの多彩な機能が利用可能(一部制限あり)
・ShadowRoot要素検索でJavaScriptが不要な専用メソッド有
・VBAだけで処理が完結するためカスタマイズが容易
・未実装だがWebDriver BiDiの対応も技術的に可能
【デメリット】
・他のサイトの参考記事が少なく、AIが生成するコードに誤りが多い
⇒私が経験した事をnote記事に掲載。生成AIが学習することを期待
・高機能である反面、Microsoft Defenderの誤検知が発生しやすい
⇒当面の間ファイルにパスワードを設定する運用で対応
2 xlsmファイルのダウンロード
・ ファイルダウンロード(公式サイト)(パスワードは123)
2025年10月23日時点の最新バージョンは6.9
・xlam(アドイン)形式のファイルは、2024年3月以降、提供停止
・対象ブラウザは、Edge、Chrome、FireFox(機能制限があり非推奨)
・EdgeのIEモードはバージョン5.9から非対応。
3 セキュリティおよびVBEの設定
- ・ xlsmファイルのアイコン右クリック ⇒ 「プロパティ」 ⇒ 「許可する」
- ・「セキュリティの警告」メッセージ
- ・「コンテンツの有効化」ボタンを押すと消える
- ・「OneDriveで運用している場合」"自動保存がオフです"メッセージ
- ・パスワード付きファイルの場合「自動保存オフ」が必須
- ・「ファイル」⇒「オプション」⇒「保存」からチェックを外すと消える
- ・「開発」タブ ⇒ 「Visual Basic」ボタン ⇒ 「ツール」⇒ 「オプション」
- ・「編集」タブ ⇒ 「変数の宣言を強制する」にチェック
- ・「全般」タブ ⇒ エラートラップ「エラー処理対象外のエラーで中断」
4 動作確認
「SeleniumVBA.xlsm」内の標準モジュール「test_ActionChains」をVBE上から実行して、Edgeが起動して画面が動いていればOK
Chromeブラウザの利用はコードを「driver.StartEdge」を「driver.StartChrome」に変更してから実行。
この時点でWebDriverがダウンロードフォルダに自動ダウンロードされる。
5 運用
この「SeleniumVBA.xlsm」一つで運用でき、ファイル名を変更しても動作に支障はなし。なお、配布する場合はこちらを参照
運用開始時は、新規に標準モジュールを作成してコードを記述。ワークシートにはデータ入出力および実行ボタン作成エリアとして運用
SeleniumBasicをSeleniumVBAに変換する記事 SeleniumBasicからのコード変換方法 を掲載。
SeleniumVBAのバージョンアップの際は、モジュールを差し替える必要があるが、バージョンアップ作業が楽になるExcelマクロ がある。
6 サンプルコード
Yahoo! JAPAN の乗換案内 を事例とした。
Option Explicit
Sub Sample()
'WebDriverの宣言
Dim driver As WebDriver
Set driver = New WebDriver
With driver
'WebDriverを起動する
.StartEdge
'ブラウザを起動する(この記述は省略不可)
.OpenBrowser
'サイトを開く
.NavigateTo "https://transit.yahoo.co.jp/"
'入力フォームに文字入力して検索ボタンをクリックする
Dim elm As WebElement
'出発:東京
Set elm = .FindElement(By.XPath, "//input[@name='from']")
elm.SendKeys "東京"
'到着:新宿
Set elm = .FindElement(By.XPath, "//input[@name='to']")
elm.SendKeys "新宿"
'検索ボタンクリック
Set elm = .FindElement(By.XPath, "//input[@value='検索']")
elm.Click
'ブラウザを終了する
.CloseBrowser
'WebDriverを終了する
.Shutdown
End With
End Sub
AIが提示するコードで、driver.OpenBrowser が省略されているケースが見受けられるが、省略できないので注意が必要
7 公式Wiki
公式Wikiページはこちら(GitHub)。困った時はDicussionで質問することも可
SeleniumVBA.xlsmの「test_」で始まる標準モジュールに、実務で有用とされる多数のサンプルコードが掲載
8 参考記事
私が実務で経験したノウハウをnote記事に掲載。これ以外にも多数記事あり。
