みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでInternetExplorerを操作してWebスクレイピング!
IEはMicrosoftさんも使用してくれるなとお達しがありましたが、環境によってはしばらく頑張っていただく必要がありますかね。
それで、実際に使用するときにはIEオブジェクトを生成したり、指定のURLにアクセスしたり、Documentオブジェクトを取得したり、読み込み待ちをしたり…
けっこういつも同じことをしているんですよね。
そんなときには、部品化ですよ、部品化!
そして、部品化をするなら、クラスですよ、クラス!
ということで、今回からシリーズで、エクセルVBAでIEを使ったスクレイピングをするときに便利なクラスの作り方をお伝えしていきます。
なお、IEの基本操作については以下の記事からはじまるシリーズに詳しく書いていますので、そちらも参考にしてくださいね。
まず今回は、エクセルVBAでIEを操作するもっとも簡単なクラスを作成する方法をお伝えします。
では、行ってみましょう!
IEによるスクレイピングの準備
IEによるスクレイピングをする準備を進めていきましょう。
- InternetExplorerの操作をするには「Microsoft Internet Controls」
- HTMLの操作をするには「Microsoft HTML Object Library」
というそれぞれのライブラリを参照設定しておく必要があります。
以下の記事にこれらのライブラリの参照設定について詳しく書いておりますので、忘れずにやっておきましょうね。
IEを操作するクラスを作る
では、さっそくIEを操作するクラスを作成していきましょう。
クラスを作成する手順は以下の記事で詳しく紹介していますので、わからない方は参考にしながら進めてみてください。
さて、まずVBEの「挿入」メニューの「クラスモジュール」からクラスモジュールを挿入します。
次に、挿入したクラスモジュールについて、プロパティウィンドウのオブジェクト名を「IEObject」としましょう。
これがクラス名になります。
これで、クラス完成っす(空っぽですが)!
以下のようなプロシージャを実行すると…
Sub MySub()
Dim ieObj As IEObject: Set ieObj = New IEObject
Stop
End Sub
ほら、Stop時にローカルウィンドウを見ると、ちゃんとIEObjectのインスタンスが生成できたことが確認できますよね。
IEObjectクラスのメンバー
InternetExplorer型のプロパティを定義する
さて、そんなIEObjectクラス。
中身は空っぽです。メンバーとして何を持っておくべきでしょうか?
大前提として、InternetExplorerを操作できる必要がありますよね。
そいういうのは、ひとまずパブリック変数として宣言しておいて、プロパティとして持っておけばOKっす。
そうすれば、IEObjectクラスはその機能を内包できるようになります。
Public IE As InternetExplorer
コンストラクタでInternetExplorerオブジェクトを生成する
ただ、IEObjectクラスについて、Newをしてインスタンスを生成しただけでは、その内部に持つべきInternetExplorerオブジェクトは生成されていません。
なので、IEObjectクラスのコンストラクタ内に、InternetExplorerオブジェクトのNewをしてあげることで、IEObjectのインスタンスの生成時に、InternetExplorerオブジェクトを持つようにします。
コンストラクタはすなわちイベントプロシージャClass_Initializeですね。
それでNewによるインスタンス生成は以下のように使います。
Private Sub Class_Initialize()
Set IE = New InternetExplorer
End Sub
コンストラクタ、すなわちイベントプロシージャClass_Initializeについては以下の記事をご覧くださいね。
IEObjectクラスでIEを操作する
IEを表示する
そして、クラスモジュールで宣言したパブリック変数は、インスタンスを生成した際にはプロパティとして使用できます。
つまりIEプロパティを経由して、IEの操作ができるはず…
では、まずはIEを表示してみましょう。
標準モジュールで以下プロシージャを作って実行してみます。
Sub MySub()
Dim ieObj As IEObject: Set ieObj = New IEObject
ieObj.IE.Visible = True
Stop
End Sub
VisibleプロパティはTrueにすれば、InternetExplorerオブジェクトを表示しますね。
実行すると、以下のように空っぽですがIEが表示されます。
IEを閉じる
では、次にIEObjectのIEプロパティを経由して、IEを閉じてみましょう。
IEを閉じるには、Quitメソッドでしたね。
以下プロシージャを実行すると、Stopから再開したときにIEが閉じることが確認できますね。
Sub MySub()
Dim ieObj As IEObject: Set ieObj = New IEObject
ieObj.IE.Visible = True
Stop
ieObj.IE.Quit
End Sub
まとめ
以上、エクセルVBAでIEを操作するもっとも簡単なクラスを作成する方法をお伝えしました。
IEの操作方法とクラスの使い方がそれぞれなんとなくわかっていれば、たぶん大丈夫。
もしわからない方は、記事内で紹介した記事で復習していきましょう。
次回は、URLへのアクセスを作成していきます。
どうぞお楽しみに!
連載目次:エクセルVBAでIEを操作するクラスを作る
エクセルVBAでInternetExplorerを操作してWebスクレイピング、まだまだ現役で必要となる現場もあるでしょう。このシリーズでは、IEを使ったスクレイピングをするときに便利なクラスの作り方をお伝えします。- エクセルVBAでIEを操作するもっとも簡単なクラスを作成する方法
- エクセルVBAでIEを操作するクラスでWebページを開くメソッドを追加する
- エクセルVBAでIEを操作するクラスに読み込み待ちとドキュメント取得の機能を追加する方法
- エクセルVBAでIEを操作するクラスにname属性で取得した要素から内容を取り出すプロパティを作成
- エクセルVBAでIEを操作するクラスにリンクテキストでa要素を探してリンクする方法
- エクセルVBAでIEを操作するクラスにテーブルのデータを取得するメソッドを追加する方法
- エクセルVBAでIEを操作するクラスにWebページのテーブルデータをシートに書き出すメソッドを追加する
- エクセルVBAでIEを操作するクラスに検索入力&ボタンクリックのメソッドを追加する方法
- エクセルVBAでIEを操作するクラスにログイン処理をするメソッドを追加する方法
- エクセルVBAによるIEを操作するクラスに指定秒数の待ち時間を入れるメソッドを追加する