エクセルVBAでIEを操作するクラスにWebページのテーブルデータをシートに書き出すメソッドを追加する


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

エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方のシリーズです。

前回の記事はこちら。

エクセルVBAでIEを操作するクラスにテーブルのデータを取得するメソッドを追加する方法
エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方をお伝えしております。今回は、エクセルVBAでIEを操作するクラスにテーブルのデータを取得してデバッグ出力するメソッドを追加していきます。

Webページのテーブルデータを取得するメソッドを作成しました。

それで、テーブルデータを取得しても、イミディエイトウィンドウに出力するだけではちょっと微妙ですよね…

せっかくエクセルVBAなので、ワークシートに書き出すというのが基本っすもんね。

ということで、今回はエクセルVBAによるIEを操作するクラスにWebページのテーブルデータをシートに書き出すメソッドを作成していきます。

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

前回のおさらい

まず、前回のおさらいからです。

IEを操作するクラスIEObjectはこちらです。

前回は、Webページのtable要素を表すHTMLTableを渡すことで、そのデータをイミディエイトウィンドウに出力するPrintTableDataメソッドを作りました(今回の内容で関わるメンバーだけ掲載しています)。

確認用の標準モジュールのSubプロシージャがこちらです。

これで、IEで表示したページの最初のtable要素のデータを取得することができます。

Webテーブルのデータをシートに書き出すメソッド

今回は、取得したテーブルデータをシート上に出力するように変更していきたいと思います。

作ったメソッドがこちらのWriteTableDataメソッドです。

対象となるtable要素であるHTMLTableオブジェクトに加えて、データを書き出す基点となるRangeオブジェクトをパラメータcellで受けるようにしました。

その位置から、行方向にi、列方向にjというカウント変数を用います。

  • tr要素内のth要素・td要素をすべて取り出したらiをプラス1
  • th要素またはtd要素の内容をセルに書き込んだらjをプラス1

そのi,jを使って、Offsetプロパティで書き出し先のセルを移動させていくという作戦です。

WriteTableDataメソッドの動作確認

では、以下のようなSubプロシージャを作成して、WriteTableDataメソッドの動作の確認をしてみましょう。

これまたシンプルですね。

書き出し先はオブジェクト名Sheet1のA1セルとします。

実行すると、IEが動作して以下のようにシートにテーブルデータが書き出されます。

シートに書き出したWebページのテーブルデータ

51位以降を取得したい場合は

  1. ページをめくってtable要素を取得
  2. 書き出したシートの最終行を求める
  3. 最終行の次の行以降にテーブルデータを書き込む

という流れで作れば良さそうですね。

あと、一部見出しにセルの結合があったり、フッターにも見出し行があったりするので、その辺が気になれば、標準モジュールの処理で追加する必要がありますね。

必要に応じてチャレンジしてみてください。

まとめ

以上、エクセルVBAでIEを操作するクラスにWebページのテーブルデータをシートに書き出すメソッドを追加する方法をお伝えしました。

縦横がきれいにそろっているtable要素であればだいたいうまく取得して書き出せると思いますので、便利かな~と思います。

次は、検索窓にテキストを入力するメソッドを作っていきます。

エクセルVBAでIEを操作するクラスに検索入力&ボタンクリックのメソッドを追加する方法
エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方をお伝えしております。今回は、エクセルVBAでIEを操作するクラスに検索窓の入力&ボタンクリックのメソッドを追加する方法をお伝えします。

どうぞお楽しみに!

連載目次:エクセル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を操作するクラスに指定秒数の待ち時間を入れるメソッドを追加する

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

コメント

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