エクセルバージョン
マイクロソフト365
本日はvbaのwebスクレイピングでHTMLのtableの
・th(table header)
・tr(table row)
・td(table data)
の文字を取得して、ワークシートに1行ずつ書きだしていく方法を解説します。
それでは行ってみましょう!
Menu
HTMLサンプル
今回は下記のようなhtmlのテーブルのデータを使用します。
【今回使用するHTMLのテーブル】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <table border="2" style="border-collapse: collapse"> <tbody> <tr> <th>サイズ</th> <th align="center">価格</th> </tr> <tr> <td>並盛</td> <td>352円(税込 387円)</td> </tr> <tr> <td>大盛</td> <td>522円(税込 574円)</td> </tr> <tr> <td>特盛</td> <td>642円(税込 706円)</td> </tr> </tbody> </table> |
VBAサンプル
➀定数constのURLに取得したいURLを入力します。
➁定数constのTAGNAMEに取得したいth,tr,tdを入力します。
※Microsoft HTML Object Libraryを参照設定します。
参照設定したら超絶簡単なので、早速コピぺしてテーブル情報を取得してみましょう(^o^)o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | Option Explicit '①取得したいURLを入力 Const URL As String = "https://dailyrecords.blog/vbaテーブルサンプル" Const TAGNAME As String = "td" '②取得したいthかtrかtdを入力 Sub tableData取得() 'IEオブジェクト作成 Dim objIE As Object Set objIE = CreateObject("Internetexplorer.Application") 'IEプロパティ設定 With objIE .Visible = True .navigate URL End With '読み込み待ち Do DoEvents Loop Until objIE.readyState = 4 '変数宣言 Dim i As Integer Dim objHtml As IHTMLElementCollection Dim tbElement As HTMLTable 'objHTMLに取得したい要素を指定してセット Set objHtml = objIE.document.getElementsByTagName(TAGNAME) 'A列に取得した要素の文字を1行ずつ書き込む i = 1 For Each tbElement In objHtml Cells(i, 1) = tbElement.innerText i = i + 1 Next 'IEオブジェクト破棄 Set objIE = Nothing MsgBox "FINISH" End Sub |
thの取得
VBAサンプルの➁の定数constのTAGNAMEの値をthにすることで下記のようになります。
objIE.document.getElementsByTagName(“th“)
下記のピンクの2箇所(th)を取得できます。
【html】
【th結果】
セルに1行ずつthを書き出せます(*^^)v
trの取得
VBAサンプルの➁の定数constのTAGNAMEの値をtrにすることで下記のようになります。
objIE.document.getElementsByTagName(“tr“)
下記の赤枠の4箇所(tr)が取得できます。
【html】
【tr結果】
セルに1行ずつtrを書き出せます(*^^)v
tdの取得
VBAサンプルの➁の定数constのTAGNAMEの値をtdにすることで下記のようになります。
objIE.document.getElementsByTagName(“td“)
下記のピンクの6箇所(td)が取得できます\(^^)/
【html】
【td結果】
セルに1行ずつtdを書き出せます(*^^)v
まとめ
エクセルVBAでもテーブル情報は簡単に取得できますね(((^-^)))
以上です。