Important
For English users
This project focuses on pure VBA control of Chromium via CDP without chromedriver.exe. Please use a browser translator for details.
スクレイピングに必要なすべての要素を、このマクロブック「1つ」に詰め込みました。
面倒な環境構築はもう必要ありません。このマクロブックを開いたその瞬間から、あなたの業務効率化とインターネット自動操作への旅が始まります。
本ツールは、現代のWeb技術を攻略するために必須となる「3つの神器」を実装しています。
- 🚀 REST WebAPI (WinHTTP 5.1)
- 高速・軽量なデータ収集の王道。参照設定のみで完結する堅牢な実装です。
- 🤖 ブラウザ自動操作 (CDP via Pipe & WebDriver BiDi)
- Chromiumベースのブラウザ(Edge/Chrome)を自在に操ります。外部ドライバー(exe)を必要としない、パイプ通信によるモダンな実装です。
- 🌐 WebView2 制御 (WebView2 Branch / Beta)
- UserFormへのネイティブ統合: ExcelのUserForm上に直接ブラウザを表示。
- 究極の一体感: Excelとブラウザが一つになったような操作感を求める方へ。
- ※現在
WebView2ブランチにて開発中。
- ⚡ WebSocket 通信 (Beta)
- リアルタイム通信への挑戦。WinAPIを駆使し、最低限の接続・送受信機能を搭載しました。VBAの限界を押し広げる、発展途上の機能です。
当プロジェクトは、用途に合わせて2つのブランチ(実装方式)を展開しています。
「ブラウザを、外から、自在に操る」
- 通常の Edge/Chrome をパイプ通信で制御。
- 既存のブラウザプロファイル(お気に入りやログイン状態)をそのまま流用可能。
- 安定性が高く、デバッグも容易な主流の方式です。
「ブラウザを、Excelに、取り込む」
- Excel UserForm 内に WebView2 を直接埋め込み。
- 「ど~~~~しても、Excelと一体化して動いてる感を味わいたい」 方への究極のUI体験。
- UserForm 上のボタンからネイティブにスクレイピングを実行可能です。
従来の CDP (Chrome DevTools Protocol) 操作に加え、現在 W3C で世界標準として次世代プロトコル策定が進められている 「WebDriver BiDi」 にいち早く対応しました(WebDriverBiDiCore.cls を実装)。
外部ツールの chromedriver.exe や Selenium 等の中間ウェアを一切使わず、「VBA単体で完結する」 という当プロジェクトの理念はそのままに、以下のような高度な操作が可能になりました。
- 📥 非同期イベントの完璧な購読(読込完了やコンソールエラーのリアルタイム検知)
⚠️ JavaScript アラートダイアログの細密制御(VBAをフリーズさせないフォールバックの実装)- 🔌 BiDi+ による CDP トンネリング(標準機能では足りない部分を柔軟にカバー)
📖 詳細な技術ドキュメントや使い方は、公式ドキュメント(GitHub Pages)をご覧ください。
このツールは、世界中のVBA職人が公開してくれた素晴らしいライブラリの数々を、実務で使いやすい形に統合(マッシュアップ)したものです。 偉大な先人たちの知恵とコードに、心からの敬意と感謝を表します。
- WebSocket実装のコアロジック
- CDP制御・パイプ通信の基盤
- Chromium-Automation-with-CDP-for-VBA
- 製作者:longvh211氏
- Chromium-Automation-with-CDP-for-VBA
- WinHTTP 5.1 ラッパー
- VBA-Web
- オリジナル製作者:Tim Hall氏
- VBA-Web
- 高速・高機能なJSONパーサー
- WebJsonConverter.cls (from SeleniumVBA)
- GCuser99氏による改良
- メンテナンス性を考慮し、既存のJsonConverterからこちらへ換装済み
- WebJsonConverter.cls (from SeleniumVBA)
- 高速な文字コード変換ラッパー
- How to convert VBA/VB6 Unicode strings to UTF-8
- David Ireland DI Management Services Pty
- VBAで Windows APIを使った UTF-8 ←→ Unicode相互変換
- 製作者:@yamashiroakihito
- How to convert VBA/VB6 Unicode strings to UTF-8
- ログレベルの基礎部分
- VBA-Log
- 製作者:timhall氏
- VBA-Log
- ChromiumブラウザをBiDi化するためのコアロジック
- chromium-bidi
- 製作者:GoogleChromeLabsチーム
- chromium-bidi
- UserFormにWebView2を追加DLなしで埋め込んだすごい方
※各機能の詳細な使用方法やメソッドについては、上記オリジナルライブラリのドキュメントをご参照ください。
ダウンロードしたマクロブックを開くと、Excelの上部に 「保護ビュー」 という黄色いバーが表示され、「編集を有効にする」ボタンを押す必要がある場合があります。
さらに、マクロを実行しようとすると、セキュリティの警告が表示されることがあります。

これは、あなたのPCが、インターネットから来た、"見知らぬ"ファイルから、あなた自身を守ろうとしている、正常で、非常に賢い動作です。
- Excelを全て閉じてください
- DLしたExcelファイルを右クリックして、プロパティを選択

- 許可する チェックボックスをオンにして OKボタンをクリック

- 再度、ツールを開いて、「編集を有効にする」ボタンを押す
このマクロブックを、安全に、そして最大限に活用していただくために、「なぜ、このような一手間が必要なのか」 を、少しだけ、ご説明させてください。
昔々、インターネットは、もっとのどかな場所でした。
しかし、ある時から、Excelマクロのふりをした、悪意のある「ウイルス」 が、世界中で大流行し始めました。
人々は、メールに添付された、ただのExcelファイルを開いただけで、PCを乗っ取られてしまう、という悲劇に、何度も見舞われたのです。
そこで、Microsoftは、大きな決断をしました。
「もう、インターネットから来た、すべてのファイルを、『出身不明の、怪しいヤツ』として、扱うことにしよう!」 と。
あなたが、インターネット(Webブラウザ、メールソフトなど)からファイルをダウンロードした瞬間、Windowsは、そのファイルの "見えない"部分 に、「こいつは、インターネットという、無法地帯から来た、要注意人物だ」 という、Mark of the Web (MOTW) という、特別な "刻印" を押します。
Excelは、ファイルを開く時に、まず、この「刻印」があるかどうかをチェックします。
そして、刻印を見つけると、こう判断するのです。
「待て!こいつは、素性の知れないヤツだ!
いきなり、自由に動き回らせるのは、危険すぎる。
まずは、『保護ビュー』という名の、"隔離室"に入れよう。マクロも、絶対に動かすな!」

この、厳重な警備体制を、安全に解除するための、唯一の、正規の「身元保証」手続き。
それが、ファイルのプロパティを開き、「許可する」 のチェックボックスを押す、という行為です。
これは、あなたが、Windowsに対して、 「分かってる、分かってる。こいつが、インターネットから来たのは知っている。 でも、こいつの"身元"は、この私(あなた)が、責任を持って、保証する! だから、もう、怪しいヤツとして扱うのはやめて、このPCの、正式な"市民"として、迎え入れてやってくれ」 と、宣言しているのと同じなのです。
この「身元保証」が行われると、Windowsは、そのファイルの MOTWという"刻印"を、永久に消し去ります。
その結果、Excelは、そのファイルを「信頼できる、安全なファイル」と認識し、「保護ビュー」を表示することなく、マクロを、正常に実行させてくれるようになるのです。
このマクロブックは、安全です。
どうか、あなたという"保証人"の力で、この子に、あなたのPCで活躍する「許可」を与えてあげてください。
本プロジェクトの「独自の改良点(日本語UTF-8対応、BrowserEventsプロパティ等)」、「API仕様リファレンス」、「深い仕組みや設計思想」などの重厚なドキュメントは、すべて 美しい静的サイト(GitHub Pages) に移設整理されました。
公式ドキュメントサイト (Features / API Reference) をぜひご覧いただき、VBAの限界を超えたブラウザ制御の深淵に触れてみてください!
基本的な説明は、ワークシート上に書いてあります。ここでは起動引数について説明します。
自動操作中で厄介な存在を排除するため、いくつか初期引数を設けつつ、W3C準拠の引数も付与します。
| 引数名 | 意味 |
|---|---|
| no-first-run | Chromiumベースのブラウザを初回起動時のセットアップ画面なしで立ち上げる。 初めて起動したときに表示される「ようこそ」画面や、Google,Microsoftアカウントのログインを促す画面などをスキップする。 |
| disable-fre | no-first-runと同じ。バージョンや環境によっては、no-first-runだけでは完全に抑制できないことがあるので、併用する |
| disable-popup-blocking | ポップアップのブロックを無効にします |
| disable-sync | アカウントへの自動ログインや同期を無効化します |
| disable-background-networking | バックグラウンドでネットワークリクエストを実行するいくつかのサブシステムを無効にします。 目的の通信以外の通信をなるべく排除します |
| disable-default-apps | 初回起動時にデフォルトアプリのインストールを無効にします |
| no-service-autorun | 余計なバックグラウンドサービス起動を抑制します |
| enable-automation | ブラウザが自動化によって制御されていることを示す表示を有効にします。 これにより、通常のブラウザとの混合を防ぐ目印になります。 |
| test-type=ExcelVBA | テストハーネスの種類を指定します。言ってしまえば、飾りです |
起動引数に、disable-blink-features=AutomationControlledを付与します。これにより、navigator.webdriverがfalseにオーバーライドされ、Bot検知回避が可能です。
一部のサイトはこのフラグをチェックして、アクセスできないように仕組んでいるので、必要に応じてONにしてください。
ただしこの引数、公式ではサポートされていないようなので、いつか効かなくなる可能性があることを念頭に置いて下さい。
一応、執筆段階では注意メッセージはでますが、まだ効いています。

ブラウザを自動操作するための最低限の必須引数を記述してます。クラスモジュールCDPBrowserの154行目周辺にその引数が見受けられると思います。
| 引数名 | 意味 |
|---|---|
| remote-debugging-pipe | ブラウザの"本体プロセス"とは、"別のプロセス(Excel)"から、デバッグするように仕向けます。 通信方式は、パイプ通信です。「リモート」とありますが、同じPC内からしかアクセスできない仕様となっています。 |
| user-data-dir | ブラウザのデータディレクトリ(Cookieや拡張機能、パスワード倉庫など)のフルパスを指定します。 通常は C:\Users\%USERNAME%\AppData\Local\Microsoft\Edge\User Dataですが、デバッグ機能を悪用したCookie盗難対策により必ず、User Data以外のフォルダパスを指定するように義務付けられました。このツールはデフォルトで、 Automation DataとしてUser Dataと同じ階層のパスに作られます。 |
| homepage | ブラウザ起動時の最初のURLを指定しますが余計な通信を抑えるため、about:blankで空白ページにしてます。ただし、次項の appに任意のURLが渡されるとこれは、付与しなくなります。 |
| app | startメソッドの第2引数にあたります。ブラウザ起動時の最初のURLを指定したい場合は、ここを指定することになります。ここにURLを渡して起動すると ・任意のURLへの変更不可 ・タブ生成不可 といったユーザー側による自動化を妨げる行為をある程度防ぐことが可能です。ちょっとしたキオスクモードです。 |
基本的な起動のテンプレートは下記になります。
ワークシート:ブラウザ起動設定 で設定した内容でブラウザが起動してくれるので、特にこだわりがなければこのテンプレートコードを推奨します。
Public Function 設定シートからのCDP起動(Optional StartURL As String, Optional SwitchUser As String, Optional KioskMode As edgeKioskType) As CDPBrowser
'設定シートの各セルから設定値を取得し、適用
With ShSetting01_StartBrowser
'起動ブラウザ種類の設定
'※CDP-Json コマンドによる操作なので、Chromium系統であれば、Edge,Chrome 以外にもできるかと思いますが一旦はメジャーなやつのみで
Dim ブラウザ名 As String: ブラウザ名 = IIf(.Range(.UseRangeName(4, "Demo_CDP.設定シートからのCDP起動")).value, "chrome", "edge")
'第2引数が省略ならシート側の設定を適用
Dim UseDataDir As String: UseDataDir = IIf(StrPtr(SwitchUser) = 0, .Range(.UseRangeName(2, "Demo_CDP.設定シートからのCDP起動")).value, SwitchUser)
'ブラウザ起動
Set 設定シートからのCDP起動 = New CDPBrowser
設定シートからのCDP起動.start ブラウザ名, StartURL, .Range(.UseRangeName(6, "Demo_CDP.設定シートからのCDP起動")).value, UseDataDir, .Range(.UseRangeName(3, "Demo_CDP.設定シートからのCDP起動")).value, KioskMode
End With
End Function
Sub 冒険の始まり()
'設定シートに基づくブラウザ立ち上げ
Dim HelloWorldAutomationBrowser As CDPBrowser: Set HelloWorldAutomationBrowser = 設定シートからの起動
'↓ここから、あなたのイメージをコードに落とし込む↓
'ブラウザを正常に閉じる
HelloWorldAutomationBrowser.quit
End SubPublic Function 設定シートからのBiDi起動(Optional StartURL As String, Optional SwitchUser As String, Optional KioskMode As edgeKioskType, Optional sessionCapabilitiesRequest As Dictionary) As WebDriverBiDiCore
'設定シートの各セルから設定値を取得し、適用
With ShSetting01_StartBrowser
'起動ブラウザ種類の設定
'※BiDi-Json コマンドによる操作ですが、Chromium系統に特化した制御のため、Edge,Chrome 以外にもできるかと思いますが一旦はメジャーなやつのみで
Dim ブラウザ名 As String: ブラウザ名 = IIf(.Range(.UseRangeName(4, "Demo_WebDriverBiDi.設定シートからのBiDi起動")).value, "chrome", "edge")
'第2引数が省略ならシート側の設定を適用
Dim UseDataDir As String: UseDataDir = IIf(StrPtr(SwitchUser) = 0, .Range(.UseRangeName(2, "Demo_WebDriverBiDi.設定シートからのBiDi起動")).value, SwitchUser)
'ブラウザ起動
Set 設定シートからのBiDi起動 = New WebDriverBiDiCore
設定シートからのBiDi起動.start ブラウザ名, StartURL, .Range(.UseRangeName(6, "Demo_WebDriverBiDi.設定シートからのBiDi起動")).value, UseDataDir, .Range(.UseRangeName(3, "Demo_WebDriverBiDi.設定シートからのBiDi起動")).value, KioskMode, sessionCapabilitiesRequest
End With
End Function
Sub BiDiによる冒険の始まり()
'設定シートに基づくブラウザ立ち上げ
Dim HelloWorldAutomationBrowser As WebDriverBiDiCore: Set HelloWorldAutomationBrowser = 設定シートからのBiDi起動
'↓ここから、あなたのイメージをコードに落とし込む↓
'ブラウザを正常に閉じる
HelloWorldAutomationBrowser.quit
End Sub

