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がわかっている特定のサイトを開くためには、ヒトが操作すると以下の行為が必要です。
- IEを立ち上げる
- URLを入力する
- サイトが表示されるのを待つ
このヒトが無意識に行なっている動作をExcel VBAで表現される必要があります。
すると以下の通りになります。
実際のコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
'変数を必ず定義すると宣言 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 |
VBAに慣れていない方からすると難しく感じるかもしれませんが、この辺は「お約束」としてある程度覚えてしまった方がいいでしょう。
上記コードの解説
上記コードを上から順に、「お約束」ごとや「意味」などを簡単に解説します。
変数を必ず定義すると宣言
1 |
Option Explicit |
そのため変数は必ず定義することを宣言しています。
変数を定義(objIE)
1 |
Dim objIE As InternetExplorer |
間違っているかもしれませんが、理解いただくために嘘くさい説明をすると
モジュール : このプログラム全体
変数 : 長い単語を何度も書くのはめんどくさいので、省略文字に置き換える
オブジェクト : 集合体
「objIE」は好きな文字列に変更いただいてかまいません。
当サイトでは「objIE」で統一していきます。
参考まで、上記参照設定せずに「Dim objIE As Object」でも稼働しますが、Internet Explorer型オブジェクトを指定することでインテリセンス(自動補完)機能が働くので今後のコーディングに非常に便利です。
変数を定義(docIE)
1 |
Dim ieDoc As HTMLDocument |
今回は使用していませんが、以後毎回使用するために記載しておきます。
サイトを呼び出した結果、上記Internet Explorer型オブジェクトである「objIE」のDocumentプロパティにHTMLDocumentオブジェクトとして収録されます。
と書いても難しいかと思いますので、毎回お約束のように定義してください。
なお経験上、HTML型ドキュメントにセットしなければ取得できないプロパティもあります。
そのため、HTMLドキュメントに収録することをお勧めします。
上記同様「ieDoc」ば好きな文字列に変更いただいてかまいません。
当サイトでは「ieDoc」で統一していきます。
参考まで、上記参照設定をせずに「Dim ieDoc As Object」もしくは「objIE.document」でも稼働しますが、参照できないプロパティなどがあるため当サイトでは推奨していません。
プログラムの実行単位を定義
1 2 3 4 5 |
Sub IE_open() ・・・・ End Sub |
次のEnd Subまでがプログラムになります。
IE_openはそのプログラム名となり、最初のSubの直後に記載します。
()はここではお約束として覚えておきましょう。
IE_openという名前のプログラムは「・・・」の間に記述されることになります。
IEを立ち上げる
1 2 |
Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True |
最初に指定したオブジェクトの変数にオブジェクトを作成し、そのオブジェクトを可視化しています。
なんてことは覚えても、ExcelでVBAを操作する限りにおいては役に立ちません。
覚えておきたいのは、ObjIEは先に定義した変数ですので、この名前「objIE」を変更する場合は、全体的に修正をしてください。
URLを指定
1 |
objIE.Navigate2 "https://www.yahoo.co.jp/" |
もちろん好きなサイトのURLに変更いただければ、そのサイトが表示されることとなります。
画面が表示されるのを待つ
1 2 3 |
While objIE.Busy Or objIE.readyState <> READYSTATE_COMPLETE DoEvents Wend |
オブジェクトへの参照を解除
1 2 |
Set docIE = Nothing Set objIE = Nothing |
不要論もあるようですが、ここはお約束で設定しています。