エクセルVBAでIEを操作するクラスにテーブルのデータを取得するメソッドを追加する方法


table

photo credit: Cristian Ştefănescu He was a friend of mine via photopin (license)

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

エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方をお伝えしております。

前回の記事はこちら。

エクセルVBAでIEを操作するクラスにリンクテキストでa要素を探してリンクする方法
エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方をお伝えしております。今回は、エクセルVBAでIEを操作するクラスに、リンクテキストでa要素を探して取得するメソッドを追加していきます。

リンクテキストでa要素を探してリンクする方法でした。

今回のテーマはテーブルデータの取得です。

普通に処理書くとわりと面倒なので、クラスのメンバーとして定義しておけば簡単にできそうですよね…!

ということで、エクセルVBAでIEを操作するクラスにテーブルのデータを取得するメソッドを追加する方法です。

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

前回のおさらい

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

まずIEを操作するクラスIEObjectです。

前回は、GetElementByLinkTextメソッドを作りました(今回の内容で関わるメンバーだけ掲載しています)。

検証するための標準モジュールのプロシージャがこちらでした。

Webページのテーブルデータを取得する

今回はガラっとネタが変わりまして、Webページのテーブルデータを取得する便利メソッドを作っていきます。

こちらのYahooファイナンスの時価総額ランキングのページから、時価総額順位のテーブルデータを取得していこうというものです。

時価総額上位:株式ランキング – Yahoo!ファイナンス

ページを開いたイメージはこちらです。

Yahooファイナンスの時価総額上位ランキングのテーブル

幸い、このページにはテーブル要素はひとつしかありませんので、その取得は容易です。

あとは、その内部のtr要素、そしてさらにその配下のth要素、td要素をループで取り出せればOKということですね。

テーブルデータを取得して出力するメソッド

まずは、table要素を渡すと、その内部のデータをイミディエイトウィンドウに出力するPrintTableDataメソッドを作ってみました。

こちらです。

複雑そうに見えますが、テーブルの構造がわかっていれば以外と簡単です。

まず、table要素をHTMLTableオブジェクトとしてパラメータtableで受けます。

その配下には行を表すtr要素がありますから、その全てについてループを回します。それが4~17行目からのループです。

さらに、行の中には見出しセルを表すth要素、もしくはtd要素がありますから、それぞれ存在するすべてについてループを回して、その内容をinnerTextプロパティで取得してデバッグ出力しています。

テーブルデータ取得メソッドの動作確認

では、このPrintTableDataメソッドを動作確認してみましょう。

以下のプロシージャを標準モジュールに記述して実行してみます。

かなりシンプルに書けますよね。

実質、URLのアクセスをするNavigateメソッドと、テーブルを指定して出力するPrintTableDataメソッドの2行だけです。

実行をすると、イミディエイトウィンドウに、以下のようにテーブル内のデータが出力されます。

Webページのテーブルデータの出力結果

まとめ

以上、エクセルVBAでIEを操作するクラスにテーブルのデータを取得するメソッドを追加する方法をお伝えしました。

テーブルの構造がきれいに揃っていないとちょっとうまくいかない場合もあるので注意です。

さて、次回はせっかくデータを取得したので、シートに出力をするように変更していきたいと思います。

エクセルVBAでIEを操作するクラスにWebページのテーブルデータをシートに書き出すメソッドを追加する
エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方のシリーズです。今回はエクセルVBAによるIEを操作するクラスに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をコピーしました