VBA技術解説
VBAでのInternetExplorer自動操作

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
最終更新日:2020-05-04

VBAでのInternetExplorer自動操作


VBAでInternetExplorerを操作する場合の基本について解説します。


VBAでInternetExplorerを操作し、Webのデータを取得したり、リンクをクリックしたり、これらを自動で行う事が出来ます。
定型的なブラウザ操作であれば、VBAで自動化することで大きな省力化になります。

VBEの参照設定

InternetExplorerを操作するには、
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")

このようにVBAを書きます。
しかし、これでVBAを書き始めてしまうと、InternetExplorerのプロパティやメソッドが分かりません。

そこで、
「Microsoft Internet Controls」
これを参照設定します。
Dim objIE As New InternetExplorer
このようにすることで、インテリセンス(自動補完)が働くので
コーディングが楽になります。

VBA マクロ InternetExplorer

さらに、HTMLドキュメントの操作になるので、
「Microsoft HTML Object Library」
これも参照設定します。
Dim objHtml As HTMLDocument
Set objHtml = objIE.Document

VBA マクロ InternetExplorer

InternetExplorerの開始と終了

objIE.navigate "https://で始まるURL"
これで、InternetExplorerで、指定のページを開く事ができます。

InternetExplorerを非表示のまま操作する場合は、
objIE.Visible = False
表示するなら、
objIE.Visible = True

そして、終了する時は、
objIE.Quit
Set objIE = Nothing

一応、お決まり通りに、Nothingにしましょう。

Dim objIE As New InternetExplorer
objIE.Visible = True '見えるようにするなら
objIE.Navigate "https://excel-ubara.com/"
'ロード待ちが必要
Dim objHtml As HTMLDocument
Set objHtml = objIE.Document
'いろいろな処理
objIE.Quit
Set objIE = Nothing

HTMLオブジェクトの操作

HTMLDocumentには、各種のプロパティ・メソッドが用意されています。
スクレイピングで良く使うものとしては、

getElementById
getElementsByClassName
getElementsByName
getElementsByTagName
querySelector
querySelectorAll

参照設定してあれば、インテリセンスが効きますので、そこから探すことができます。

VBA マクロ InternetExplorer

VBAでのInternetExplorer操作例

Sub sample()
  Dim objIE As New InternetExplorer
  objIE.Visible = True '見えるようにするなら

  objIE.Navigate "https://excel-ubara.com/"
  Call untilReady(objIE) 'ロード待ち

  Dim objHtml As HTMLDocument
  Set objHtml = objIE.Document

  Dim elm As Object
  '左メニューボタンの「エクセル入門」をクリックします。
  Set elm = objHtml.querySelector("#sub > nav > ul:nth-child(2) > li:nth-child(1) > a")
  Debug.Print elm.innerText
  elm.Click

  'InternetExplorerは開いたままにしておく場合は、そのままVBAを終了します。
End Sub

Sub untilReady(objIE As Object)
  Do While objIE.Busy = True Or objIE.ReadyState <> READYSTATE_COMPLETE
    DoEvents
  Loop
End Sub

ページ読み込みが終了しているかの判定をしないと、HTMLの要素取得に失敗します。
上記ではDoEventsだけ入れていますが、
時間のかかるようなページの場合には、適宜Sleep等を入れてください。

WEBクローリング&スクレイピングのサイト内参考ページ

シリーズで6ページあります。
アメブロの記事本文をVBAでバックアップする№1
後日追記 アメブロの仕様変更が度々あり、ここで紹介しているコードで取得できないものもあります、いつ仕様変更されるかわかりませんので、都度変更するのは結構大変です。あくまで、WEBページの取得技術方法として参考にしてください。アメブロにはバックアップ機能がありません。

VBAでSeleniumを使用してChromeを操作します。
VBAのスクレイピングを簡単楽にしてくれるSelenium
VBAでWebスクレイピングする方法としてIE自動操作がありますが、VBA記述が結構面倒になります、もっと簡単にスマートにVBAを書きたいと思ったら…SeleniumBasicを使ってみましょう。SeleniumBasicは、エクセルVBAでのWeb閲覧を自動化することを強力かつ簡単に実現してくれます。
VBA+SeleniumBasicで検索順位チェッカー作成
VBAでSeleniumBasicを使って検索順位チェッカーを作ってみます。SEO対策として各キーワードでの検索順位チェックは欠かせませんが、簡単に使えてキーワードを大量に指定できる良いツールがなかなかありません。Google検索をスクレイピングすることは、Google利用規約に反する可能性があります。
VBA+SeleniumBasicで検索順位チェッカー(改)
VBAでSeleniumBasicを使って検索順位チェッカーを作り、Google検索順位の履歴を管理します、既に作成解説した、VBA+SeleniumBasicで検索順位チェッカー作成こちらの改訂版になります。Google検索をスクレイピングすることは、Google利用規約に反する可能性があります。

以下では、さまざまな方法を紹介しています。
WEBデータの取得方法
WEBページのデータを取得して、エクセルのデータとして取り込みたいとの要望が多いようです。マクロVBAでWEBページのデータを取得する方法はいろいろあります。QueryTables InternetExplorer MSHTML MSXML2 順番に、以下で説明します。



同じテーマ「マクロVBA技術解説」の記事

事前バインディングと遅延バインディング(実行時バインディング)
Dictionary(ディクショナリー)連想配列の使い方について
Dictionary(ディクショナリー)のパフォーマンスについて
VBAでのInternetExplorer自動操作
VBAでのSQLの基礎(SQL:Structured Query Language)
VBAで正規表現を利用する(RegExp)
VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)
VBAでのOutlook自動操作
ADO(ActiveX Data Objects)の使い方の要点
特殊フォルダの取得(WScript.Shell,SpecialFolders)
参照設定、CreateObject、オブジェクト式の一覧


新着記事NEW ・・・新着記事一覧を見る

Variantの数値型と文字列型の比較|エクセル雑感(7月1日)
VBAのVariant型について|VBA技術解説(6月30日)
VBAのString型の最大文字数について|エクセル雑感(6月20日)
VBAで表やグラフをPowerPointへ貼り付ける|VBAサンプル集(6月19日)
アクティブシート以外の表示(Window)に関する設定|VBA技術解説(6月17日)
マクロ記録での色のマイナス数値について|エクセル雑感(6月16日)
ツイッター投稿用に文字数と特定文字で区切る|エクセル雑感(6月15日)
日付の謎:IsDateとCDate|エクセル雑感(6月14日)
IFステートメントの判定|エクセル雑感(6月13日)
インクリメンタルサーチの実装|ユーザーフォーム入門(6月12日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ