具体的にはhtml、body、table、tdタグをキーにしてTableタグ内のデータを取得する仕組みです。
tdタグ内に記述されたデータ(innertext)が取得対象となります。
実行環境はExcel VBA、IE6です。
VBA側の参照設定はデフォルトのままで実行できます。
TDタグ内のデータを取得するプロシージャ
Sub getTDinnertext()
Dim intIndex As Integer
Dim objTag As Object
Dim objTagTable As Object
Dim varTDinner(371) As Variant
intIndex = 0
For Each objTag In objIE.document.body.all
If objTag.tagname = "TABLE" Then
For Each objTagTable In objTag.all
If objTagTable.tagname = "TD" Then
varTDinner(intIndex) = objTagTable.innertext
'取得したデータに対する処理
'Debug.Print intIndex & "::" & varTDinner(intIndex)
'Cells(intIndex + 1, 1).Value = intIndex
'Cells(intIndex + 1, 2).Value = varTDinner(intIndex)
intIndex = intIndex + 1
End If
Next objTagTable
End If
Next objTag
End Sub
取得した値は配列型の変数に格納しています。
このプログラムではTD要素が371個存在したので371個の要素を持つ配列を宣言しています。
(動的配列を使った方がスマートに書けるのかな)
なのでTD要素の個数が372以上の場合、上記プログラムでは「インデックスが有効範囲にありません」というエラーが発生します。
また、このプログラムは先にIEオブジェクトを生成して取得対象のWebページを開いておく必要があります。
実際には以下のようなプログラムの中で上記プロシージャを呼び出して使っています。
アクセスしたサイトからデータを取得するプロシージャ
Sub test110712()
'IEオブジェクトを作るサブルーチン
Call CreateIE
objIE.navigate "http://www.shimatetsu.co.jp/bus/busjikoku/bust01.htm"
'ページの読み込みを待機するサブルーチン
Call WaitIE
objIE.Visible = True
Call getTDinnertext
Set objTag = Nothing
Set objTagTable = Nothing
Set objIE = Nothing
End Sub
※CreateIEプロシージャとWaitIEプロシージャについてはお手数ですがVBAでJavaScriptが埋め込まれたリンクをクリックするエントリーを参照してください。
0 件のコメント:
コメントを投稿