VBAというとローカル・オフライン環境で動作するものが大半を占めますが、実はWeb操作をすることも可能です。
WebスクレイピングというとPythonなどのライブラリが豊富な言語もありますが、サラリーマンが会社で使いたいというシーンにおいては実行環境が整えられないという課題もあります。
そうしたなか、Excelは多くの企業でインストールされているアプリケーションのため、環境の用意がほぼ不要であるという点で有利です。しかも、VBAは工夫次第で様々なWebページ操作が実現できます。
今回は、「VBAで実践するWeb操作」入門編の第1弾です。
VBAで実践するWeb操作:環境構築とタイトルの取得
このシリーズではExcel VBAで、Webページの操作を行っていきます。
今回は基礎編として、Webページにアクセスするための環境構築を行い、タイトルを取得するというシンプルなプログラムを作成してみましょう。
VBAでWebスクレイピングするための事前設定
VBAによるWebスクレイピングを行うプログラムでは、『ライブラリ』を使用する必要があります。
VBAエディタの[ツール]-「参照設定」を開き、以下の2つのライブラリにチェックを付けてください。
- Microsoft Internet Controls
- Microsoft HTML Object Library
まず動かしてみよう
チェックを付けたら、標準モジュールを挿入し、以下のコードを書いてください(指定したURLからタイトルを取得するユーザー定義関数を作成しています)。
Option Explicit
Function getTitle(url As String)
'■1.前処理
'IEのオブジェクトを作成
Dim ie As InternetExplorer
Set ie = New InternetExplorer
'IEが開かないように設定
ie.Visible = False
'■2.本処理
'指定のURLを開く
ie.Navigate (url)
'ページの読み込みが完了するまで待つ
Do While ie.readyState <> READYSTATE_COMPLETE
'OSに制御を戻す
DoEvents
Loop
'<title>タグの内容を取得する
Dim title As String
title = ie.Document.getElementsByTagName("title")(0).innerText
'■3.後処理
ie.Quit
Set ie = Nothing
getTitle = title
End Function
以降は、「getTitle(取得したいWebページのURL)」という関数名で呼び出せるようになります。
コードの解説
大きく分けて、以下の3ステップで処理を行います。
- 前処理:本処理のための事前準備
- 本処理:実際にやりたい処理
- 後処理:終了後の片づけ
この中の「前処理」「後処理」は、Webページの操作を行うVBAであれば毎回ほぼ同じ内容になりますので、覚えてしまうと良いでしょう。
では、各ステップを見ていきましょう。
1.前処理
Webページにアクセスするための「IE」のオブジェクトを作成しています。
ie.Visible = False
上記を設定した場合、IEは画面には表示されず、バックグラウンドで動く状態になります。
Trueにすると、この関数を呼び出すたびにIEが開くので画面が見づらくなります。
2.本処理
Webページを開き、「title」タグの中身を取得します。
ここでポイントになるのは、真ん中にある「ページの読み込みが完了するまで待つ」ところです。
「readyState」というプロパティが「READYSTATE_COMPLETE」になるまで、IEは「ページの読み込み中」の状態です。
「ページの読み込み中」の状態では、titleタグが読み込まれておらず、取得できない可能性がありますので、読み込み完了を待ってからtitleタグを取得しています。
ページの読み込み完了時、readyStateプロパティがREADYSTATE_COMPLETEとなる
3.後処理
前処理で開いたIEを閉じます。
この処理を行わないと、バックグラウンドでたくさんのIEが起動したままになり、パソコンの動作が不安定になってしまいますので、忘れないように注意しましょう。
IEに限らず、外部オブジェクトはちゃんと終了処理をすることが重要です
Webページ操作の応用例
今回のサンプルを応用すると、他にもこんなことができるようになります。
- HTMLソースの取得
- Webページにある画像の一括ダウンロード
- ECサイトの価格チェック
今後も解説記事を投稿していきますが、腕前に自信のある方はぜひ今回の記事をもとに自力で挑戦してみてください!
VBA独学にオススメの書籍
在宅勤務で通勤時間が浮いたならVBAの学習に充ててスキルアップを目指しませんか。
コメント