ie-excel

エクセル・マクロでie操作

Excel VBA でIEを操作して特定サイトを開く

2019/01/21

最近RPAが注目されていますが、RPAとはデスクトップ上の作業、特にWebブラウザベースの作業を自動化するというもの。
Excelマクロにはかなり昔からブラウザ操作(Internet Explore限定ですが)が実装されてました。

RPAはChromeやEdge などの操作ができるような宣伝をしていることもありますが、画像マッチングで動くだけのため、きめ細かにブラウザを自動化するにはInternet Exploreの方がまだまだ優位な状況です。
自動実行させるためには高価なRPAソフトが必要と勘違いしている方が多いのですが、Webブラウザだけの操作に限るとExcel VBAの方がより多くのことができます。

表計算ソフト本来の機能と組み合わせればRPA以上のことができますし、RPAソフト自体は高速に処理することが苦手なものが多い中、Excelマクロ経由でWebブラウザ操作すると高速処理も可能となります。
RPAソフトが高額でRPA化を躊躇されている方も多いかと思いますが、ExcelマクロでRPA化をしてみませんか?

Yahoo!メールを自動的に巡回させたり、RSSの内webサイトを巡回したり、テーブルをコピーしたり、などなど
自動実行処理を簡単に構築することが可能です。

そのため、不定期連載になりますが、Excelマクロを利用したインターネットエクスプローラの操作を解説していきます。

初回の今回のお題は
「Yahoo! Japan」のサイトをエクセルから自動的に開けること
を実践します。

前準備(参照設定)

まずはExcelマクロ側の準備をします。

今後利用する機能では「Microsoft Internet Controls」と「Microsoft HTML Object Library」が必要となります。
それぞれを利用するためには参照設定が必要となります。

・Visual Basic Editor の画面から「ツール」→「参照設定」を選択します。

参照設定

・以下のような画面が現れるため、「Microsoft Internet Controls」と「Microsoft HTML Object Library」にチェックを入れて、OKを押すことで前準備終了です。

ライブラリ

特定のサイトを開く

URLがわかっている特定のサイトを開くためには、ヒトが操作すると以下の行為が必要です。

  1. IEを立ち上げる
  2. URLを入力する
  3. サイトが表示されるのを待つ

このヒトが無意識に行なっている動作をExcel VBAで表現される必要があります。
すると以下の通りになります。

実際のコード
'変数を必ず定義すると宣言
Option Explicit

'変数を宣言
Dim objIE As InternetExplorer
Dim ieDoc As HTMLDocument

Sub IE_open()

'Internet Exploreを立ち上げる
  Set objIE = CreateObject("InternetExplorer.Application") 
  objIE.Visible = True

'URLを指定する
  objIE.Navigate2 "https://www.yahoo.co.jp/"

'該当のWebサイトが表示されるのを待つ
  While objIE.Busy Or objIE.readyState <> READYSTATE_COMPLETE
    DoEvents
  Wend

'オブジェクト参照を解除
  Set ieDoc = Nothing
  Set objIE = Nothing

End Sub

マクロを実行したら、「Yahoo! Japan」のトップサイトが開いていませんか?

VBAに慣れていない方からすると難しく感じるかもしれませんが、この辺は「お約束」としてある程度覚えてしまった方がいいでしょう。

上記コードの解説

上記コードを上から順に、「お約束」ごとや「意味」などを簡単に解説します。

変数を必ず定義すると宣言
Option Explicit

この指定はなくてもかまいませんが、経験上あるほうがいろいろと便利です。
そのため変数は必ず定義することを宣言しています。

変数を定義(objIE)
Dim objIE As InternetExplorer

上記コードはこのモジュール全体で「objIE」をInternet Explorer型オブジェクトと定義しています。

間違っているかもしれませんが、理解いただくために嘘くさい説明をすると

モジュール  : このプログラム全体
変数     : 長い単語を何度も書くのはめんどくさいので、省略文字に置き換える
オブジェクト : 集合体

「objIE」は好きな文字列に変更いただいてかまいません。
当サイトでは「objIE」で統一していきます。

参考まで、上記参照設定せずに「Dim objIE As Object」でも稼働しますが、Internet Explorer型オブジェクトを指定することでインテリセンス(自動補完)機能が働くので今後のコーディングに非常に便利です。

変数を定義(docIE)
Dim ieDoc As HTMLDocument

上記コードはこのモジュール全体で「ieDoc」をHTML型ドキュメントとして定義しています。

今回は使用していませんが、以後毎回使用するために記載しておきます。

サイトを呼び出した結果、上記Internet Explorer型オブジェクトである「objIE」のDocumentプロパティにHTMLDocumentオブジェクトとして収録されます。
と書いても難しいかと思いますので、毎回お約束のように定義してください。

なお経験上、HTML型ドキュメントにセットしなければ取得できないプロパティもあります。
そのため、HTMLドキュメントに収録することをお勧めします。

上記同様「ieDoc」ば好きな文字列に変更いただいてかまいません。
当サイトでは「ieDoc」で統一していきます。

参考まで、上記参照設定をせずに「Dim ieDoc As Object」もしくは「objIE.document」でも稼働しますが、参照できないプロパティなどがあるため当サイトでは推奨していません。

プログラムの実行単位を定義
Sub IE_open()

 ・・・・

End Sub

Subはプログラムの実行単位です。

次のEnd Subまでがプログラムになります。
IE_openはそのプログラム名となり、最初のSubの直後に記載します。
()はここではお約束として覚えておきましょう。
IE_openという名前のプログラムは「・・・」の間に記述されることになります。

IEを立ち上げる
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True

この2行はIEを起動するための「お約束」だと思ってください。
最初に指定したオブジェクトの変数にオブジェクトを作成し、そのオブジェクトを可視化しています。
なんてことは覚えても、ExcelでVBAを操作する限りにおいては役に立ちません。

覚えておきたいのは、ObjIEは先に定義した変数ですので、この名前「objIE」を変更する場合は、全体的に修正をしてください。

URLを指定
objIE.Navigate2 "https://www.yahoo.co.jp/"

開くURLを指定しています。
もちろん好きなサイトのURLに変更いただければ、そのサイトが表示されることとなります。

画面が表示されるのを待つ
While objIE.Busy Or objIE.readyState <> READYSTATE_COMPLETE
  DoEvents
Wend

Webサイトの情報がすべて表示されるまで、完全に表示されるまでは、「Busy = False」かつ「ReadyState = READYSTATE_COMPLETE」となるまで待ちます。

オブジェクトへの参照を解除
Set docIE = Nothing
Set objIE = Nothing

セットしたオブジェクトをそれぞれ解除しています。
不要論もあるようですが、ここはお約束で設定しています。

 

-ExcelでIE操作