「Excelからブラウザを動かして、面倒なWeb作業を自動化できたらいいのに…」と思ったこと、ありませんか?
結論から言うと、VBAからでもブラウザの自動操作はできます、そのための定番が「Selenium」という仕組みで、それをExcelやAccessのVBAから使えるようにしたのが今回の主役 SeleniumVBA です
しかも、専用のRPAツールを買ったり、別のソフトをインストールしたりしなくても、手元のExcel(マクロ)の延長でブラウザ操作を始められるのが手軽なところです
私はこれまで、VBAでもPythonでもブラウザ自動化をいろいろやってきました、VBA側だと長らく「SeleniumBasic」が定番だったんですが、こちらはもう更新が止まっていて、ドライバーの手動更新まわりで地味に手間がかかるんですよね
その点 SeleniumVBA は、今もちゃんとメンテされていて、ドライバーの更新まで自動でやってくれるのが大きいです、この記事では、SeleniumVBAとは何かから、導入・基本的な使い方・ドライバーの自動更新まで、ブラウザ自動化が初めての方にも分かるように順を追って解説していきます
SeleniumVBAとは?ExcelからブラウザをVBAで操作できる
まず「Selenium」から軽く説明しておきます
Seleniumは、ブラウザを自動で操作するための仕組み(プログラムからChromeやEdgeを動かす技術)です、もともとはWebサイトの自動テスト用に作られたもので、ページを開いたり、ボタンを押したり、入力欄に文字を打ち込んだり…といった「人がブラウザでやる操作」をコードで再現できます
その Selenium を、ExcelやAccessのVBAから呼び出せるようにしたライブラリが SeleniumVBA です、GitHubの GCuser99/SeleniumVBA で公開されていて、無料で使えます
特徴をざっとまとめると、こんな感じです
- Pure VBA … VBAだけで完結していて、外部の特別なソフトに依存しない
- .NET Frameworkが不要 … 後述のSeleniumBasicと違って、追加ランタイムを入れずに動く
- Windows + Microsoft Office(Excel / Access)で動く
- Chrome / Edge / Firefox に対応している
- 今もメンテが続いている(リリースが重ねられていて、比較的新しいバージョンが出ている)
仕組みとしては、SeleniumVBAがローカルで動く「WebDriver」というサーバー(ブラウザを操作する仲介役)とやり取りして、その先のブラウザを動かす…という流れになります、このあたりはPythonのSeleniumと考え方は同じなので、両方触ったことがある方ならすんなり入れると思います
「WebDriver」は、ブラウザのバージョンごとに対応するものが必要です、Chromeを使うなら「ChromeDriver」が要る、という関係になっていて、ここの食い違いがブラウザ自動化でつまずきやすいポイントなんですが、SeleniumVBAはそこを自動でそろえてくれます(詳しくは後述します)
SeleniumBasicとの違いは?なぜ今SeleniumVBAなのか
VBAでSeleniumというと、これまでは「SeleniumBasic」が定番でした、私もずっとお世話になってきたライブラリで、今でも普通に使えます
ただ、これから新しく始めるなら SeleniumVBA の方が扱いやすい場面が多いです、その理由を整理しておきます
.NET Framework 3.5 が要らない
SeleniumBasicは、古い .NET Framework 3.5 に依存しています、最近のWindowsだと初期状態でこれが入っておらず、別途有効化が必要になることがあって、導入の最初でつまずく方がそこそこいるんですよね
世代としても古い土台なので、将来のサポート面ではどうしても不安が残ります、その点 SeleniumVBAは.NETが不要で、この前提条件まわりの面倒がそもそも発生しないのが大きな違いです
アプリのインストールが要らない
SeleniumBasicは、専用のソフトをインストーラーで入れる必要があります、一方の SeleniumVBA は、配布されているアドインファイル(.xlam)を読み込むだけで使えるので、ソフトのインストールそのものが不要です
会社のPCでソフトのインストールが制限されている、みたいな環境でも導入のハードルが低いのは、地味だけど助かるポイントです
ドライバーの自動更新が標準で付いている
ブラウザ自動化で一番ありがちなトラブルが、ブラウザが自動更新されて、ドライバーのバージョンと合わなくなって動かなくなるパターンです
SeleniumBasicでこれを直すには、自分で新しいドライバーを落としてきて差し替える、という手動作業が必要でした、SeleniumVBAは ドライバーをそろえる仕組みが最初から組み込まれていて、ここを自動でやってくれます、この差は地味に効いてきます
今もメンテが続いている
SeleniumBasicは、公開されているリポジトリの更新がかなり前で止まっています、一方の SeleniumVBA は今もリリースが重ねられていて、メンテが続いているのは安心材料です
もちろん「SeleniumBasicがもうダメ」という話ではなくて、既に資産があるならそのまま使えます、ただ これから新規で組むなら、土台の新しいSeleniumVBAの方が後々ラク、という温度感です
| 項目 | SeleniumVBA | SeleniumBasic |
|---|---|---|
| 導入方法 | アドイン(.xlam)を読み込むだけ | インストーラーでソフトを導入 |
| .NET Framework | 不要 | 3.5 が必要 |
| ドライバー更新 | 自動でそろえられる | 手動で差し替え |
| メンテ状況 | 継続中 | 更新が止まっている |
| 対応ブラウザ | Chrome / Edge / Firefox | Chrome / Edge ほか |
SeleniumVBAを導入する(xlamアドインが一番ラク)
導入方法は公式に何通りか用意されていますが、配布されている「SeleniumVBA.xlam」というアドインを取り込む方法が一番ラクなので、まずはこれをおすすめします
大まかな流れはこんな感じです
GitHubのリポジトリから、配布されている SeleniumVBA.xlam(アドインファイル)を入手します、分かりやすい場所に保存しておきます
Excelを開いてVBAエディタを起動し、メニューの「ツール」→「参照設定(References)」を開きます、「参照(Browse)」から先ほどの SeleniumVBA.xlam を選んで読み込みます
参照設定にチェックが入った状態で、コード内に WebDriver と打って候補が出てくれば取り込み成功です、これで次のコードがそのまま書けるようになります
ほかにも、DLL登録用のインストーラーを使う方法や、ソースのクラス・標準モジュールを直接取り込む方法も公式に用意されています、ただ最初のうちは、参照設定するだけで済む xlamアドインがいちばん迷わないと思います
SeleniumVBAの基本的な使い方
導入できたら、さっそく動かしてみます、まずは「Googleのトップページを開いて、検索ボックスの情報を取ってきて、ブラウザを閉じる」という基本的な流れを書いてみます
Dim driver As New WebDriver
driver.StartChrome
driver.OpenBrowser
driver.NavigateTo "https://www.google.com/"
driver.Wait 1000
Dim element As WebElement
Set element = driver.FindElement(By.Name, "q")
Debug.Print element.GetText
driver.CloseBrowser
driver.Shutdown短いコードですが、ブラウザ自動化の基本がひととおり詰まっています、上から順に何をしているか見ていきます
- StartChrome … Chrome用のWebDriverを起動する(Edgeなら StartEdge、Firefoxなら StartFirefox)
- OpenBrowser … 実際にブラウザのウィンドウを開く
- NavigateTo … 指定したURLのページへ移動する
- Wait … 指定したミリ秒だけ待つ(ここでは1000=1秒)
- FindElement … ページの中から目的の要素を探す(ここでは name属性が “q” の検索ボックス)
- GetText … 見つけた要素のテキストを取り出す
- CloseBrowser … ブラウザのウィンドウを閉じる
- Shutdown … WebDriver(裏で動いていた仲介役)を終了する
流れとしては、起動 → ブラウザを開く → ページ移動 → 要素を探す → 値を取る → 閉じるという順番です、ここを押さえておけば、あとは「探す要素」と「取る/入れる値」を変えていくだけで、いろんな自動化に応用できます
ちなみに FindElement の探し方は、上の例の name 以外にも、id・class・CSSセレクタ・XPath などいくつか指定できます、このあたりの「要素の探し方」の考え方は、PythonのSeleniumとほぼ共通なので、片方を知っていればもう片方もすぐ馴染みます
最後の CloseBrowser と Shutdown を忘れると、裏でWebDriverが起動したまま残ってしまうことがあります、処理の終わりにきちんと閉じる、という形にしておくのがおすすめです
ドライバーの自動更新(SeleniumVBA最大の便利ポイント)
ここが、私がSeleniumVBAを推したい一番の理由です
前にも触れたとおり、ブラウザは勝手にバージョンアップしていくので、放っておくとドライバーとの組み合わせがズレて「昨日まで動いてたのに急に止まった」が起きます、SeleniumBasicだと、ここを自分で直す必要がありました
SeleniumVBAには WebDriverManager というクラスがあって、インストール済みのブラウザに合うドライバーを自動で検出して、必要なら自動でダウンロードしてくれます
明示的に呼ぶなら、こんな感じで書けます
Dim mngr As New WebDriverManager
Debug.Print mngr.AlignChromeDriverWithBrowser()AlignChromeDriverWithBrowser が、「今入っているChromeに合うChromeDriverを用意する」処理です(Edge・Firefox向けの対応するメソッドもあります)、公式の説明によると、StartChrome などでドライバーを起動するときにも、ブラウザに合うドライバーを自動で検出してそろえてくれる仕組みになっています
つまり、普段は特別なことを意識しなくても、ブラウザに合ったドライバーが用意されるということです、SeleniumBasicの頃にちまちまドライバーを差し替えていた手間を思うと、ここは素直にありがたいです
SeleniumBasic側でドライバーをどう手動更新するかは、別記事「VBAでChromeDriverを自動更新する方法」でまとめています、SeleniumVBAだと、ここで書いた仕組みが標準で効いてくる、という対比で読んでもらえると違いが分かりやすいと思います
SeleniumVBAはどんなことに使える?
ブラウザを自動で操作できると、できることの幅がかなり広がります、私が実務でブラウザ自動化を使ってきた中だと、ざっくり次のような場面が定番です
Webスクレイピング(情報の収集)
ページを開いて、必要な情報を読み取ってExcelに書き出す…というスクレイピングは、ブラウザ自動化の王道の使い道です
たとえば、複数ページにまたがる一覧から欲しいデータだけ拾ってきて表にまとめる、みたいな作業、手でやると気が遠くなりますが、SeleniumVBAなら NavigateTo でページを順に開いて FindElement で値を取る、という流れで回せます
スクレイピングをするときは、対象サイトの利用規約やrobots.txtを確認して、相手のサーバーに負荷をかけすぎないようにするのが大切です、待機(Wait)を挟むなど、節度を持って使うようにしてください
ブラウザ操作の自動化(RPA的な使い方)
もうひとつが、毎日のようにやっているブラウザ作業を丸ごと自動化する、いわゆるRPA的な使い方です
ログインして、決まった画面を開いて、入力して、ボタンを押して…という一連の操作を、ExcelのVBAから流せます、Excelに置いた一覧を読みながら順番に処理する、みたいなこともできるので、Excelが得意なデータ管理と、ブラウザ操作を1つにまとめられるのがVBAでやる強みです
専用のRPAツールを別途用意しなくても、すでに手元にあるExcelの延長で組めるのは、地味だけど実務だとうれしいポイントだと思います
SeleniumVBAを使うときの注意点
便利なSeleniumVBAですが、始める前に知っておきたい前提もいくつかあります
- Windows + Microsoft Office が前提 … ExcelやAccessのVBAから使うライブラリなので、その環境がベースになります
- 操作するブラウザが必要 … Chrome / Edge / Firefox のいずれかがインストールされている前提です
- アドイン(.xlam)の読み込み・マクロ実行が前提 … 普段アドインを使わない方は最初の取り込みで少し戸惑うかもしれません、会社のPCだとマクロやアドインがセキュリティポリシーで制限されていることもあるので、自分の環境で使えるかを確認してから始めるのがおすすめです
- 初回はドライバーのダウンロードが入る … 自動でそろえてくれる分、最初の実行時にドライバーの取得が走ることがあります
- 日本語の情報はまだ少なめ … 比較的新しいので、困ったときは公式リポジトリの情報を当たる場面が多めです
とはいえ、コードの書き味そのものはSeleniumらしい素直な作りで、PythonやSeleniumBasicを触ったことがあれば StartChrome → NavigateTo → FindElement の流れはすぐ掴めると思います、最初のドライバー取得さえ越えれば、あとは快適です
SeleniumBasicという選択肢もある
ここまで SeleniumVBA を中心に紹介してきましたが、VBAでのブラウザ自動化には SeleniumBasic という長く使われてきた選択肢もあります
ざっくり選び分けると、こんな感じで考えると分かりやすいです
- これから新しく始めるなら … .NET不要でドライバー自動更新つきの SeleniumVBA が扱いやすい
- すでにSeleniumBasicの資産があるなら … そのまま使える、ただしドライバーは手動更新が必要になる
SeleniumBasicをこれから入れてみたい方は、導入手順を「SeleniumBasicの導入方法」でまとめているので、そちらを見てもらえれば一通りそろいます
ドライバーの手動更新まわりでつまずいたときは、「VBAでChromeDriverを自動更新する方法」が役立つはずです、SeleniumVBAの「自動でそろう」仕組みと読み比べると、それぞれの立ち位置がよりはっきりすると思います
まとめ
SeleniumVBAは、ExcelやAccessのVBAからブラウザを自動操作できるライブラリで、Seleniumの仕組みをそのままVBAから使えるのが魅力です
あらためてポイントを整理すると、こんなところです
- SeleniumVBAなら、ExcelのVBAからChrome / Edge / Firefox を自動操作できる
- SeleniumBasicと違って .NETが不要で、ドライバーの更新も自動でそろえてくれる
- 導入は xlamアドインを参照設定するのが一番ラク
- 基本は StartChrome → NavigateTo → FindElement → GetText → CloseBrowser の流れ
- スクレイピングやRPA的な作業まで、幅広く応用できる
これからExcelでブラウザ操作を始めるなら、自動更新つきで土台の新しい SeleniumVBA はかなり心強い選択肢だと思います、まずは今回の基本コードを動かすところから、気軽に試してみてください



コメント