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


VBAでIEのテキストボックスに値を入力する方法~VBA(マクロ)でIE操作
今回は、VBAでIEのテキストボックスに値を入力する方法を紹介したいと思います。
まず、サイト内の入力要素一覧を見てみましょう。
下記コードは「グーグルの検索サイト」の全ての入力要素をエクセルに書き出すコードです。
ダブルクリックでコピーできますのでとりあえず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 | Sub IEinput() 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 = "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に張り付けて実行してみてください。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | Sub IE_textINPUT() '*****↓ここまでは以前と一緒*************************************************** '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 '値がないとエラーが出るので、エラー回避用 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="テスト"
と入力することで、文字を入力することができます。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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を動かすために必要な情報をまとめています!!
コメント欄