エクセルVBAでIEを操作するもっとも簡単なクラスを作成する方法


scraping

photo credit: BONGURI 20181013 Denpark 8 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでInternetExplorerを操作してWebスクレイピング!

IEはMicrosoftさんも使用してくれるなとお達しがありましたが、環境によってはしばらく頑張っていただく必要がありますかね。

それで、実際に使用するときにはIEオブジェクトを生成したり、指定のURLにアクセスしたり、Documentオブジェクトを取得したり、読み込み待ちをしたり…

けっこういつも同じことをしているんですよね。

そんなときには、部品化ですよ、部品化!

そして、部品化をするなら、クラスですよ、クラス!

ということで、今回からシリーズで、エクセルVBAでIEを使ったスクレイピングをするときに便利なクラスの作り方をお伝えしていきます。

なお、IEの基本操作については以下の記事からはじまるシリーズに詳しく書いていますので、そちらも参考にしてくださいね。

【エクセルVBAでIE操作】10分で終わるセッティングとWEBページの閲覧確認
エクセルVBAでInternetExplorerを操作するシリーズの導入編です。今回はIEを操作するときに最初にすべきセッティングと実際にWEBページを開く動作確認までをやってみたいと思います。

まず今回は、エクセルVBAでIEを操作するもっとも簡単なクラスを作成する方法をお伝えします。

では、行ってみましょう!

スポンサーリンク

IEによるスクレイピングの準備

IEによるスクレイピングをする準備を進めていきましょう。

  • InternetExplorerの操作をするには「Microsoft Internet Controls」
  • HTMLの操作をするには「Microsoft HTML Object Library」

というそれぞれのライブラリを参照設定しておく必要があります。

以下の記事にこれらのライブラリの参照設定について詳しく書いておりますので、忘れずにやっておきましょうね。

【エクセルVBAでIE操作】10分で終わるセッティングとWEBページの閲覧確認
エクセルVBAでInternetExplorerを操作するシリーズの導入編です。今回はIEを操作するときに最初にすべきセッティングと実際にWEBページを開く動作確認までをやってみたいと思います。

IEを操作するクラスを作る

では、さっそくIEを操作するクラスを作成していきましょう。

クラスを作成する手順は以下の記事で詳しく紹介していますので、わからない方は参考にしながら進めてみてください。

【初心者でもできる】エクセルVBAで最も簡単なクラスを作る方法
「初心者でもわかる!エクセルVBAのクラスモジュールの活用法」をテーマに、その使い方と便利さについてシリーズでお伝えしていきます。今回は、エクセルVBAで最も簡単なクラスを作る方法をお伝えしていきます。

さて、まずVBEの「挿入」メニューの「クラスモジュール」からクラスモジュールを挿入します。

クラスモジュールの挿入

次に、挿入したクラスモジュールについて、プロパティウィンドウのオブジェクト名を「IEObject」としましょう。

これがクラス名になります。

クラスモジュールの名前を変更

これで、クラス完成っす(空っぽですが)!

以下のようなプロシージャを実行すると…

Sub MySub()
    
    Dim ieObj As IEObject: Set ieObj = New IEObject
     
    Stop
     
End Sub

ほら、Stop時にローカルウィンドウを見ると、ちゃんとIEObjectのインスタンスが生成できたことが確認できますよね。

クラスIEObjectの生成をローカルウィンドウで確認

IEObjectクラスのメンバー

InternetExplorer型のプロパティを定義する

さて、そんなIEObjectクラス。

中身は空っぽです。メンバーとして何を持っておくべきでしょうか?

大前提として、InternetExplorerを操作できる必要がありますよね。

そいういうのは、ひとまずパブリック変数として宣言しておいて、プロパティとして持っておけばOKっす。

Public オブジェクト変数 As InternetExplorer

そうすれば、IEObjectクラスはその機能を内包できるようになります。

Public IE As InternetExplorer

コンストラクタでInternetExplorerオブジェクトを生成する

ただ、IEObjectクラスについて、Newをしてインスタンスを生成しただけでは、その内部に持つべきInternetExplorerオブジェクトは生成されていません。

なので、IEObjectクラスのコンストラクタ内に、InternetExplorerオブジェクトのNewをしてあげることで、IEObjectのインスタンスの生成時に、InternetExplorerオブジェクトを持つようにします。

コンストラクタはすなわちイベントプロシージャClass_Initializeですね。

それでNewによるインスタンス生成は以下のように使います。

Set オブジェクト変数 = New InternetExplorer
Private Sub Class_Initialize()
    Set IE = New InternetExplorer
End Sub

コンストラクタ、すなわちイベントプロシージャClass_Initializeについては以下の記事をご覧くださいね。

エクセルVBAでインスタンス生成時に自動で処理を実行するイベントプロシージャClass_Initialize
「初心者でもわかるエクセルVBAのクラスモジュール」のシリーズです。今回はエクセルVBAでインスタンス生成時に自動で処理を実行するイベントプロシージャ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オブジェクトを表示しますね。

InternetExplorerオブジェクト.Visible = True

実行すると、以下のように空っぽですがIEが表示されます。

VBAでIEを表示する

IEを閉じる

では、次にIEObjectのIEプロパティを経由して、IEを閉じてみましょう。

IEを閉じるには、Quitメソッドでしたね。

InternetExplorerオブジェクト.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を操作するクラスでWebページを開くメソッドを追加する
エクセルVBAでIEによるスクレイピングをするときに便利なクラスの作り方をシリーズでお伝えしています。InternetExplorerを操作するクラスでWebページを開くメソッドを追加する方法です。

どうぞお楽しみに!

連載目次:エクセルVBAでIEを操作するクラスを作る

エクセルVBAでInternetExplorerを操作してWebスクレイピング、まだまだ現役で必要となる現場もあるでしょう。このシリーズでは、IEを使ったスクレイピングをするときに便利なクラスの作り方をお伝えします。
  1. エクセルVBAでIEを操作するもっとも簡単なクラスを作成する方法
  2. エクセルVBAでIEを操作するクラスでWebページを開くメソッドを追加する
  3. エクセルVBAでIEを操作するクラスに読み込み待ちとドキュメント取得の機能を追加する方法
  4. エクセルVBAでIEを操作するクラスにname属性で取得した要素から内容を取り出すプロパティを作成
  5. エクセルVBAでIEを操作するクラスにリンクテキストでa要素を探してリンクする方法
  6. エクセルVBAでIEを操作するクラスにテーブルのデータを取得するメソッドを追加する方法
  7. エクセルVBAでIEを操作するクラスにWebページのテーブルデータをシートに書き出すメソッドを追加する
  8. エクセルVBAでIEを操作するクラスに検索入力&ボタンクリックのメソッドを追加する方法
  9. エクセルVBAでIEを操作するクラスにログイン処理をするメソッドを追加する方法
  10. エクセルVBAによるIEを操作するクラスに指定秒数の待ち時間を入れるメソッドを追加する

タイトルとURLをコピーしました