VBA開発

VBAでIE操作「Web上のテーブル要素(表)からデータを抜き出す」

テーブル要素から データを抜き出したい

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

注意点

tr (Table Row)
表の横一行。trタグ内th要素td要素が存在。
th(Table Header)
表の見出しセル。thタグ内見出しテキストが存在。
td(Table Data)
表の値セル。tdタグ内のテキスト(もしくは数値)が存在。

その他

Internet Explorerを使用して、Webスクレイピングは敷居が高い風に捉えられますが、
上記のように、パーツ化して組み合わせ処理するだけです。

Web上のデータを触りたい要望は会社様でも個人様でも多いと思います。
VBA IE操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。

 

コメント

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