要素取得のマクロの改良版です。
速度が半端なく上がりました。
↓のサイトで、IEを表示することができました。
次は、HTMLの中身を確認し、任意の情報を取り出す方法を書いていこうと思います。

VBAでIEの全要素のデータを取得する方法
マクロでIEを操作して行いたいことは、
①サイト内のデータを取得。
②検索ボックスなどテキストに代入。
③検索ボタンなどをプッシュする。
ことなどだと思います。この操作を行うためには、まずhtmlコードを読み解く必要があります。
下記コードは「グーグルの検索サイト」の
htmlコードを読み取るために、全ての要素をエクセルに書き出すコードです。
ダブルクリックでコピーできますのでとりあえずVBAに張り付けて実行してみてください。
Sub IEoutput2() Application.ScreenUpdating = False '*****↓ここまでは以前と一緒*************************************************** 'IEの起動 Dim objIE As Object Set objIE = GetObject("", "InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://www.google.com/?hl=ja" ' このURLを任意に変更 ' ページの表示完了待ち。 While objIE.ReadyState <> 4 Or objIE.Busy = True DoEvents Wend '*****↑ここまでは以前と一緒*************************************************** '****今日はここから↓*************************************************** On Error Resume Next '値がないとエラーが出るので、エラー回避用 i = 1 '開始行を指定 J = objIE.document.all.Length '要素の数を知る Cells(i, 1).Value = "uniqueID" Cells(i, 2).Value = "tagname" Cells(i, 3).Value = "Type" Cells(i, 4).Value = "NAME" Cells(i, 5).Value = "ID" Cells(i, 6).Value = "className" Cells(i, 7).Value = "TABINDEX" Cells(i, 8).Value = "Vakue" Cells(i, 9).Value = "checked" Cells(i, 10).Value = "親のtagname" Cells(i, 11).Value = "innertext" Cells(i, 12).Value = "outertext" Cells(i, 13).Value = "outherhtml" Cells(i, 14).Value = "innerhtml" Dim A As Object Dim YOUSO(1000, 1 To 15) As String For Each A In objIE.document.getElementsbytagname("*") YOUSO(i + 1, 1) = A.uniqueID 'uniqueID YOUSO(i + 1, 2) = A.TAGNAME '親のTAG YOUSO(i + 1, 3) = A.Type 'タイプ ※selectボックスは”select-one”と取得 YOUSO(i + 1, 4) = A.Name '名前 YOUSO(i + 1, 5) = A.ID 'ID YOUSO(i + 1, 6) = A.className 'クラス名 YOUSO(i + 1, 7) = A.TabIndex 'フォーカス順序 (Tabでの移動順) YOUSO(i + 1, 8) = A.Value '値 YOUSO(i + 1, 9) = A.Checked 'チェック状態 (True = チェック有り、false = チェック無し) 'checkboxやradioボタンから取得します YOUSO(i + 1, 10) = A.parentElement.TAGNAME '親のTAG If Len(A.innerHTML) > 50 Then YOUSO(i + 1, 11) = Left(A.innertext, 10) & " ~~~ " & Right(A.innertext, 10) YOUSO(i + 1, 12) = Left(A.outertext, 10) & " ~~~ " & Right(A.outerrext, 10) YOUSO(i + 1, 13) = Left(A.outerHTML, 10) & " ~~~ " & Right(A.outerHTML, 10) YOUSO(i + 1, 14) = Left(A.innerHTML, 10) & " ~~~ " & Right(A.innerHTML, 10) Else YOUSO(i + 1, 11) = A.innertext YOUSO(i + 1, 12) = A.outertext YOUSO(i + 1, 13) = A.outerHTML YOUSO(i + 1, 14) = A.innerHTML End If Dim C(20) As String '階層を表示 For Z = 1 To 20 C(Z) = A.TAGNAME If A.TAGNAME = "HTML" Then Exit For Set A = A.parentElement Next For L = Z To 1 Step -1 Cells(i + 1, 30 + Z - L) = C(L) Next i = i + 1 'ステータスバーに進捗を表示 Application.StatusBar = i & "/" & J Next Range(Cells(2, 1), Cells(i, 14)) = YOUSO Cells.WrapText = False Application.ScreenUpdating = True Application.StatusBar = False '表示を固定 Columns(1, 9).AutoFit Cells(1, 2).EntireColumn.Interior.ColorIndex = 6 Cells(2, 3).Select ActiveWindow.FreezePanes = True objIE.document.getElementsByName("q")(0).Value = "テスト" End Sub
プログラムを簡単に説明
少々長くなりましたが、やっていることは簡単で、サイトを表示させた後、
For Each A In objIE.document.getElementsByTagName("*") ~~~ Next
で全要素を検索し、要素内の属性やデータを抜き出して、エクセルに張り付けていっています。
.document.getElementsByTagName("○○") でTagNameが○○のものを取り出せるのですが、
*を使うことで、ワイルドカードとして全種類検索することを可能としています。
実行結果を確認する。
実行すると、下記のようなデータがエクセルに書き出されたと思います。
抜き出す属性やデータとしては、
①uniqueID ②tagname ③Type ④NAME ⑤ID ⑥className ⑦TABINDEX ⑧Vakue ⑨checked ⑩親の⑪tagname ⑫innertext ⑬outertext ⑭outherhtml ⑮innerhtml
を取り出してみました!
基本的に、VBAでIEを操作するときには、
②のTagNameを使って要素を取り出し、④⑤⑧などのデータを用いて要素を特定。
その後「.Click」などを使ってIEを操作していきます。

ちなみにこのプログラムでは最後に、google検索欄に「テスト」と入力するために下記コードを入れておきました。
objIE.document.getElementsByName("q")(0).Value = "テスト”。
次からはこのように抜き出した要素を使って、IEを操作していきたいと思います!
P.S.
document.getElementByなどなどvbaではあまり見ない関数だなと思っていたら、
javasprictからきているようですね。まだまだ奥が深いようです…

その他、VBAでIEを動かすために必要な情報をまとめています!!
コメント欄
[…] […]