↓のサイトで、IEを表示、要素を抜き出すことができました。
次は、インプット要素をすべて確認し、任意のテキストボックスに値を入力する方法を説明します。


VBAでIEのテキストボックスに値を入力する方法~VBA(マクロ)でIE操作
今回は、VBAでIEのテキストボックスに値を入力する方法を紹介したいと思います。
まず、サイト内の入力要素一覧を見てみましょう。
下記コードは「グーグルの検索サイト」の全ての入力要素をエクセルに書き出すコードです。
ダブルクリックでコピーできますのでとりあえずVBAに張り付けて実行してみてください。
Sub IEinput() 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 = "No" 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" Cells(I, 15).Value = "リンク先" Dim A As Object For Each A In objIE.document.getElementsByTagName("INPUT") Cells(I + 1, 1) = I - 1 '個数 Cells(I + 1, 2) = A.TAGNAME 'TAGネーム Cells(I + 1, 3) = A.Type 'タイプ ※selectボックスは”select-one”と取得 Cells(I + 1, 4) = A.Name '名前 Cells(I + 1, 5) = A.ID 'ID Cells(I + 1, 6) = A.className 'クラス名 Cells(I + 1, 7) = A.TabIndex 'フォーカス順序 (Tabでの移動順) Cells(I + 1, 8) = A.Value '値 Cells(I + 1, 9) = A.Checked 'チェック状態 (True = チェック有り、false = チェック無し) 'checkboxやradioボタンから取得します Cells(I + 1, 10) = A.parentElement.TAGNAME '親のTAG If Len(A.innerHTML) > 50 Then Cells(I + 1, 11) = Left(A.innertext, 10) & " ~~~ " & Right(A.innertext, 10) Cells(I + 1, 12) = Left(A.outertext, 10) & " ~~~ " & Right(A.outerrext, 10) Cells(I + 1, 13) = Left(A.outerHTML, 10) & " ~~~ " & Right(A.outerHTML, 10) Cells(I + 1, 14) = Left(A.innerHTML, 10) & " ~~~ " & Right(A.innerHTML, 10) Else Cells(I + 1, 11) = A.innertext Cells(I + 1, 12) = A.outertext Cells(I + 1, 13) = A.outerHTML Cells(I + 1, 14) = A.innerHTML End If I = I + 1 'ステータスバーに進捗を表示 Application.StatusBar = I & "/" & J Next On Error GoTo 0 Cells.WrapText = False Application.ScreenUpdating = True Application.StatusBar = False Range(Cells(1, 1), Cells(1, 14)).EntireColumn.AutoFit Range(Cells(1, 2), Cells(1, 2)).EntireColumn.Interior.ColorIndex = 6 Range(Cells(1, 4), Cells(1, 4)).EntireColumn.Interior.ColorIndex = 6 Range(Cells(1, 8), Cells(1, 8)).EntireColumn.Interior.ColorIndex = 6 End Sub
簡単にプログラム説明
テキストボックスのTagNameは「INPUT」
テキストボックスの TagName は「INPUT」ですので、サイトを表示させた後、
For Each A In objIE.document.getElementsByTagName("INPUT") ~~~ Next
でINPUTの要素をすべて検索し、抜き出した結果をエクセルに書き出していっています。
入力したい要素を確認( テキストボックスはType「text」)
マクロを実行すると、 下記のようなTagNameがINPUTの一覧表ができたと思います。
その中でも今回は、テキストボックスに入力したいので、Type(c列)がtextのものを探します。
今回はNo3が検索欄に当たり、Nameが"q"であることが分かりました。

テキストボックスに入力してみる。
上記のプログラムより、テキストボックスの要素を見つけることができました。
この要素のデータを用いて、今度は文字を入力していきたいと思います。
やることは簡単、先ほどと同じ要領で、
①FOR EACH でINPUTをすべて抜き出す。
②IF分で入力したい要素を見つける。→今回はNameが"q"
③.valueで値を入力する。→.value="test"
となっております。
ダブルクリックでコピーできますのでVBAに張り付けて実行してみてください。
Sub IE_textINPUT() '*****↓ここまでは以前と一緒*************************************************** '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 '値がないとエラーが出るので、エラー回避用 Dim A As Object For Each A In objIE.document.getElementsByTagName("INPUT")'①FOR EACH でINPUTをすべて抜き出す。 If A.Name = "q" Then A.VALUE="テスト"'②IF分で入力したい要素を見つけて③valueで代入。 Next On Error GoTo 0 End Sub
ほかのやり方でテキストボックスに入力してみる。
また、単純に<INPUT>の3番目でもありますので、単純に、
objIE.document.getElementsByTagName("INPUT")(3).value="テスト"
と入力することで、文字を入力することができます。
Sub IE_textINPUT2() 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 '値がないとエラーが出るので、エラー回避用 objIE.document.getElementsByTagName("INPUT")(3).value="テスト" End Sub
その他、VBAでIEを動かすために必要な情報をまとめています!!
コメント欄