スポンサーリンク

【簡単】VBAでIEのテキストボックスに値を入力する方法~VBA(マクロ)でIE操作

IE関係
この記事は約11分で読めます。

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

【簡単】VBAでIEの任意のサイトを表示させる方法~VBA(マクロ)でIE操作
VBAでIEを操作する方法はネットを検索しても、まだ確立されきっていないように感じますので、素人が学びながら、そこまで深堀せずに簡単に説明していきたいと思います。VBAでIEの任意のサイトを表示させる方法VBAの入門編とし...
【簡単】VBAでIEの全要素のデータを取得する方法~VBA(マクロ)でIE操作
↓のサイトで、IEを表示することができました。次は、HTMLの中身を確認し、任意の情報を取り出す方法を書いていこうと思います。VBAでIEの全要素のデータを取得する方法マクロで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

コメント欄

タイトルとURLをコピーしました