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

VBAでIEの全要素のデータを取得する方法
マクロでIEを操作して行いたいことは、
①サイト内のデータを取得。
②検索ボックスなどテキストに代入。
③検索ボタンなどをプッシュする。
ことなどだと思います。この操作を行うためには、まずhtmlコードを読み解く必要があります。
下記コードは「グーグルの検索サイト」の
htmlコードを読み取るために、全ての要素をエクセルに書き出すコードです。
ダブルクリックでコピーできますのでとりあえずVBAに張り付けて実行してみてください。
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | Sub IEoutput2() Application.ScreenUpdating = False '*****↓ここまでは以前と一緒*************************************************** 'IEの起動 Dim objIE As Object Set objIE = GetObject( "" , "InternetExplorer.Application" ) objIE.Visible = True ' ページの表示完了待ち。 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を動かすために必要な情報をまとめています!!
コメント欄
[…] […]