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 ・・・新着記事一覧を見る

VBA100本ノック 18本目:名前定義の削除|VBA練習問題100(11月6日)
VBA100本ノック 17本目:重複削除(ユニーク化)|VBA練習問題100(11月6日)
VBA100本ノック 16本目:無駄な改行を削除|VBA練習問題100(11月5日)
VBA100本ノック 15本目:シートの並べ替え|VBA練習問題100(11月4日)
VBA100本ノック 14本目:社外秘シート削除|VBA練習問題100(11月3日)
VBA100本ノック 13本目:文字列の部分フォント|VBA練習問題100(11月1日)
VBA100本ノック 12本目:セル結合を解除|VBA練習問題100(10月31日)
VBA100本ノック 11本目:セル結合の警告|VBA練習問題100(10月30日)
VBA100本ノック 10本目:行の削除|VBA練習問題100(10月29日)
VBA100本ノック 9本目:フィルターコピー|VBA練習問題100(10月28日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.マクロって何?VBAって何?|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」をお願いいたします。
本文下部へ