VBAのマスコットキャラクターとして登場させてもらってます!今回は窓の杜の読者のみなさんに、VBAによるIE操作を体験していただくための特別レッスンにやってきました~。「これは面白い」とか「これは役に立つ」って思ってくれたら、ぜひ本の方もチェックしてみてくださいね。VBAというのは、Excelの操作を自動化してくれる「マクロ」という機能を使うためのプログラミング言語です。Excelにあらかじめ「ああしろ」「こうしろ」という命令を記録しておいて、その命令をあとで再生できる、ってイメージするとわかりやすいかもしれませんね。VBAからIEを操作できる」と言っても、それで具体的にどんなことができるのかピンとこない人がいるかもしれませんね。その逆で、ワークシートに一覧になってるデータをWebページの入力欄にコピペして登録、みたいな作業とか......。VBAからのIE操作テクニックを使えばできちゃうんです。VBAでのIEの自動操作をみんなに体験してもらうために、簡単なサンプルを用意しました。街のどこかにいるボクを探し出す、ちょっとしたゲームみたいな感覚で、Webページからボクの画像を探し出してみてください。テクニックを深く理解しなくても「具体的にどんなことができるの?」とか、「プログラムのソースコードはどれくらいの分量なの?」とか、だいたいの雰囲気を掴んでもらえるとうれしいです。このWebページを開くと、ボクがいそうな場所がたくさんリストアップされています。手で一つひとつのリンクをクリックして調べてもいいんですけど、今回はこれをVBAで自動化して見つけちゃおう、というわけです。そんな人にもボクが手とり足とり教えちゃいますので、心配しないでくださいね。「VBEを開いてModule1を追加する」と聞いてやり方がわかる人は、ここは読み飛ばしても大丈夫です。それでは、VBAでプログラミングするための準備をしていきますよ~。リボンにVBAプログラミング関連の機能をひとまとめにした[開発]タブを表示します。2010/2013のものだから、それ以外のバージョンにはまた別の方法を後ほどご紹介しますね。あと、すでに[開発]タブが表示されている場合は飛ばしてオッケーですよ。[ファイル]タブをクリックして[オプション]をクリックすると、「Excelのオプション」という画面が出ます。ここで[リボンのユーザー設定]を選択して右側の[開発]にチェックを入れて、右下の[OK]ボタンをクリックしてください。確認してみてくださいね。Editor)と呼ばれる「VBAをプログラミングする場所」を開く方法です。Basic]ボタンをクリックしてください。これがVBEで、これからVBAでプログラミングする際に使うメイン画面なんですよ~。2003/2007の場合はこの方法でVBEを開いて、この先に進んでくださいね。それでは早速プログラミングを......と言いたいところだけれど、ちょっと待ってくださいね。VBAプログラムを書くための専用の部品、「モジュール」を追加しましょう。VBE画面の左側にあるツリーの[VBAProject]を右クリックして、[追加]→[標準モジュール]と選択してください。これをダブルクリックすると、VBE画面の右側が「Module1」を編集するために開いた状態になります。これで「Module1」にプログラミングできるようになりました!ここまで来たらもう大丈夫。はじめにメインの処理を書く「Mainプロシージャ」を作って、IEの画面を開くところまで処理を書いちゃいましょう。プロシージャっていうのはいくつかの処理をまとめたもので、他のプログラミング言語で言う「関数」などと意味はだいたい同じ、という理解でここではOKですよ。Subこのプロシージャを作ったら、[F5]キーを押して実行してみてください。何もWebページが表示されていないIEが開いたら成功です。VBAでIEを思いのままに操作できるプログラミング術』の本でしているので、ここではちょっとだけ解説しますね。ポイントは変数ieに、プログラムで開いたIEの画面を格納しているところです。このあと変数ieをVBAから操作することで、IEの画面そのものも操作できるようになります。次に作る「URLへ移動する」という処理も、変数ieの「Navigateメソッド」を実行することで実現できるんです。Sub」行の前に次のコードを追加してから、もう一回Mainプロシージャを実行してみてください。"http://www.forest.impress.co.jp/article/2013/05/excelvba/"今度は白いページじゃなくて、場所の一覧ページが表示されましたか?IEを開いてWebページを表示するだけなら、たったの4行でできちゃうんです。今回は詳しい解説は省略しているので意味はわからないかもしれませんが、結構簡単ですよね!それじゃあ、場所の一覧ページから各場所に移動してボクを探す処理を作っていきましょう......と言いたいところですけど、ちょっと待ってくださいね。これからWebページを開いて、内容をチェックして......という処理の繰り返しを作るんですけど、実はWebページが完全に開ききる前にVBAから操作するとエラーになっちゃうんです。VBAからIEを操作するときも同じで、ちゃんと表示されるのを待ってあげないといけないんです。そこで、まずはwaitNavigationプロシージャをMainプロシージャの後に追加しましょう。Sub行の前にwaitNavigationプロシージャの呼び出しを追加しましょう。ieこれで変数ieはWebページの移動が完了した状態で扱えるようになりました!というわけで、いよいよ場所の一覧ページを操作します。Sub行の前に追加しましょう。Nextポイントは「ie.Document.getElementsByTagName("A")」というところ。これは「IEのHTML文書からAタグをすべて取得する」という処理をしています。Aタグにはハイパーリンク先のURLがhref属性で指定されているから、「コレクション“urls”」に一旦格納してあとで使えるようにします。コレクションがわからないって人は、「複数の同じような情報を一括して格納するもの」と思ってもらえればここではオッケーですよ。これで各ページに移動する準備は整いました。次に、各ページにボクがいるかをチェックする処理を作っていきましょう。下準備として、さっきURLの一覧を格納したコレクションurlsのそれぞれのURLに対し、処理を行うループを作ります。あとでチェックした結果を書き出すために使うカウンタ変数iも、このタイミングであわせて用意しておきますね。Sub行の前に追加しましょう。Webページへ移動→移動先の情報を書き出し→ボクの存在をチェック・書き出しっていう流れです。ちなみにボクは「AiMidorita.png」という画像なので、このファイル名をチェックしていきますね。Nextの間(「'ここで各URLに対して処理」というコメントがあるところ)に、以下のコードを挿入してみてください。1調べた結果をワークシートの1列目に連番、2列目に場所の名前、3列目にURL、4列目にボクがいるかいないかを書き出す処理をしています。「IEのHTML文書からタイトルを取得する」という処理で、具体的にはIEのタイトルバーに表示されるものと同じ文字列が取得できます。「IEのURLを取得する」という処理で、これはアドレスバーに表示されてるURLと同じです。「IEのHTML文書の本文(body)タグ内部のHTMLソースに"AiMidorita.png"という文字列が含まれているか」というチェックをしています。本当なら画像タグに限定して調べたりした方が確実なんですけど、ここではちょっと簡単に作っちゃいました。今回作成したプログラムの全文は以下に掲載していますので、うまく動かなかった場合は見比べてみてくださいね。動かすだけだったらいろんな方法がありますけど、その結果をそのままワークシートに一覧表で記録できるのがExcelでのいいところですよねっ!今回作ったプログラムは、お仕事に応用することもできるんです。VBAでIEを思いのままに操作できるプログラミング術』では、以下のような実際のサイトを操作するサンプルを解説してます。チェックしてみてくださいね!編集部より:壁紙&書籍プレゼントのお知らせ!特別レッスン掲載を記念して、「翠田あい」とExcelのワークシートをイメージした壁紙を2種類ご用意しました。解像度毎に3サイズ用意しましたので、お使いの環境に合ったものをダウンロードしてご利用ください。VBAでIEを思いのままに操作できるプログラミング術』を、抽選で5名様にプレゼントいたします。ふるってご応募ください!プレゼントの応募は締め切りました。