【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👍
んじゃ、またねぇ✋


ディスカッション
コメント一覧
まだ、コメントがありません