テーブル要素から データを抜き出したい
Excel VBAでIE自動制御では、Web上の表(テーブル要素)からデータを抜き出す処理も多いです。
■テーブル要素を抜き出したい
・ヤフオクから、落札相場のデータを取得したい
・ヤフオクから、出品データの動向を探りたい
・株価の値上がり率や値下がり率上位の、データを取得したい
・特定の株の時系列の株かを取得したい
・ヤフオクから、落札相場のデータを取得したい
・ヤフオクから、出品データの動向を探りたい
・株価の値上がり率や値下がり率上位の、データを取得したい
・特定の株の時系列の株かを取得したい
テーブル要素から データを抜き出すサンプルコード
トヨタ自動車株式会社(証券コード7203)の時系列の株価を取得します。
サンプルでは時系列の一部しか取得しません。
aタグの次へボタンを押すことで、さらに過去のデータも取得可能です。
'■Webの表を取得するサンプル Public Sub call_sample_table_data_get() Dim objIE As InternetExplorer Dim tr As HTMLTableRow Dim th As HTMLTableCell Dim td As HTMLTableCell Dim i As Long: i = 1 Dim j As Long: j = 1 '■IEを起動 Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '■指定したURLに飛び、Webサイトの表示を待つ objIE.navigate "https://info.finance.yahoo.co.jp/history/?code=7203.T" Call Call_IE_WaitTime '■テーブルデータを取得 tbodyタグの2(1)番目のデータのtrタグを取得 For Each tr In objIE.document.getElementsByTagName("tbody")(1).getElementsByTagName("tr") '■■thタグを取得(タイトル行) For Each th In tr.getElementsByTagName("th") Cells(i, j) = th.innerText j = j + 1 Next th '■■tdタグを取得(データ行) For Each td In tr.getElementsByTagName("td") Cells(i, j) = td.innerText j = j + 1 Next td '■■列(j)をリセットし、行(i)を+1する i = i + 1 j = 1 Next tr End Sub
注意点
- こちらのコードだけでは動作しません。
下記の読み込み待ちのパーツ化したコードが必要です。
VBAでIE操作「ブラウザの読込待ち」処理をパーツ化する【エクセルマクロ】 - テーブルタグ( tr th td )はHTMLを少し理解する必要があります。
tr (Table Row)
表の横一行。trタグ内にth要素やtd要素が存在。
th(Table Header)
表の見出しセル。thタグ内に見出しテキストが存在。
td(Table Data)
表の値セル。tdタグ内に値のテキスト(もしくは数値)が存在。
表の横一行。trタグ内にth要素やtd要素が存在。
th(Table Header)
表の見出しセル。thタグ内に見出しテキストが存在。
td(Table Data)
表の値セル。tdタグ内に値のテキスト(もしくは数値)が存在。
コメント