【VBA】Webのテーブルデータ取得(InternetExplorer)
HTML
jimです。じゃんぼ✋
最近、Web操作(IE)の自動化をしなくてはいけなくて。
他にも方法はあるんだけど、情シスに断られてしまって。。
だから、仕方なくVBAでWebの自動化をしたっていう。。。
その時、Web操作のマクロを組むのが久しぶりで『色々忘れてた』ってのと、『派遣先が変わる度に調べるの面倒だな』っと思ったから記事にすることにしました。
ってことで、今回は『Webのテーブルデータ取得』の記事っす。
例えば↓の表みたいなものがあったとする(例えばね例えば)
a | i | u | e | o | |
---|---|---|---|---|---|
– | あ | い | う | え | お |
K | か | き | く | け | こ |
S | さ | し | す | せ | そ |
これをブラウザの開発者ツール(F12)で見てみる・・・
『table』の配下に『tr』がいるということ。
↓図にすると、こんな感じでしょうか?
テーブルがあって、その下に行があるといった感じ。
さらに『tr』の配下を見てやります。
『tr』の配下に『th(td)』がいるわけです。
↓これを図にすると、こんな感じかな?
わかります?
コードを書き散らかす
じゃあ、具体的にどう取得すんのか?ってーと、
Excelでいう○○と言うBookの△△って言うシートの××ってセルみたいな指定をします。
下記コードのdebug.print部分っす。
参照設定に『InternetControls』と『HTMLObjectLibrary』が必要です。
Option Explicit Sub table() Dim objIe As InternetExplorer Dim ieDocument As HTMLDocument Dim i As Integer If GetWindow(objIe) = False Then Set objIe = CreateObject("InternetExplorer.Application") objIe.Visible = True objIe.navigate "https://bw-rocket.com/2021/08/23/post-2750/" Call WaitLoad(objIe) End If 'th '正確には↓でしょうか? Debug.Print objIe.document.getElementById("gaketable"). _ getElementsByTagName("tbody")(0). _ getElementsByTagName("tr")(0). _ getElementsByTagName("th")(1).innerText '繰り返すなら変数使ったほうがいい? Set ieDocument = objIe.document.getElementById("gaketable"). _ getElementsByTagName("tbody")(0) For i = 0 To 5 Debug.Print ieDocument.document.getElementsByTagName("th")(i).innerText Next 'そもそもtrにIDが付いてるならtrから取得すればよい? Debug.Print objIe.document.getElementById("gake"). _ getElementsByTagName("th")(2).innerText 'td '2行目の4項目目 Debug.Print objIe.document.getElementById("gake0"). _ getElementsByTagName("td")(3).outerText '3行目の5項目目 Debug.Print objIe.document.getElementById("gake1"). _ getElementsByTagName("td")(4).innerHTML '4行目の6項目目 Debug.Print objIe.document.getElementById("gake2"). _ getElementsByTagName("td")(5).outerHTML End Sub Private Sub WaitLoad(ByVal objIe As InternetExplorer) Do While objIe.Busy = True Or objIe.readyState <> 4 DoEvents Loop End Sub Function GetWindow(ByRef objIe As InternetExplorer) Dim shellObject As Object Dim windowObject As Object Set shellObject = CreateObject("Shell.Application") For Each windowObject In shellObject.Windows If windowObject = "Internet Explorer" Then If windowObject.document.Title = "【VBA】IEの表からデータを抜き出す | 崖っぷち派遣社員の日常" Then Set objIe = windowObject GetWindow = True Exit For End If End If Next End Function
「tableやtrにid振ってなかったらどうすんの?」って思いました?
やれるけど、面倒す。というか、IEの自動操作全般ね。
そもそもの話、IEの操作って面倒だしオワコンだしイケてないのかもしれませんね。
独り言みたいなコメントアウトは無視してOK👍
んじゃ、またねぇ✋
ディスカッション
コメント一覧
まだ、コメントがありません