IE操作【inputタグへの値の入力】

では前回のIE操作【IE起動~読み込み】の続きで、サンプルページのユーザーフォームの上から「ハンドルネーム、生年月日、性別、使用した事のあるOS」の操作を解説していきたいと思います。
ではフォームの入力【コード】より下記のコードを抜き出して解説していきます。
'objIEのHTMLの中からinputのタグをobjに代入しながら確認
    For Each obj In objIE.Document.GetElementsByTagName("input")
        
        'ハンドルネームの記載
        
        'objに代入されたinputタグのIDがh_nameだった場合
        If obj.ID = "h_name" Then
            'objに代入されたinputタグにhnameに代入したB2のセルの値を入れる
            obj.Value = hname
        End If
        
        '生年月日の入力
        
        'objに代入されたinputタグのIDがbirthdayだった場合
        If obj.ID = "birthday" Then
            'objに代入されたinputタグにbrdに代入したB3のセルの値を入れる
            obj.Value = brd
        End If
        
        '性別の選択
        
        'objに代入されたinputタグのInnerTextがB5のセルと同じだった場合
        If Trim(obj.Value) = Worksheets("情報").Range("B4") Then
            'objに代入されたinputタグを選択する
            obj.Click
        End If
        
        '使用した事のあるOSの選択
        
        'B5のセルが空白じゃなかった場合
        If Range("B5") <> "" Then
            'objに代入されたinputタグのInnerTextがB5のセルと同じだった場合
            If obj.Value = Worksheets("情報").Range("B5") Then
                'objに代入されたinputタグにチェックを入れる
                obj.Checked = True
            End If
        End If
        
        'C5のセルが空白じゃなかった場合
        If Range("C5") <> "" Then
            'objに代入されたinputタグのInnerTextがC5のセルと同じだった場合
            If obj.Value = Worksheets("情報").Range("C5") Then
                'objに代入されたinputタグにチェックを入れる
                obj.Checked = True
            End If
        End If
        
        'D5のセルが空白じゃなかった場合
        If Range("D5") <> "" Then
            'objに代入されたinputタグのInnerTextがD5のセルと同じだった場合
            If obj.Value = Worksheets("情報").Range("D5") Then
                'objに代入されたinputタグにチェックを入れる
                obj.Checked = True
            End If
        End If
    Next

HTMLの基礎

まず、HTMLの基礎知識として、【<input>~</input>】のように<>で囲まれた要素をタグといいます。
このタグには属性をつけることができ、IEの自動操作でよく使う属性としては「id、name、value」などがあります。
例としてid="handle_name"と書いていた場合、id属性の値はhandle_nameとなり、このhandl_nameを特定し、このタグに操作をVBAで送る事で自動操作をするという事になります。

テキストボックスへの入力

では一つ目のハンドルネームの記載の部分を実際のHTMLと比較しながら解説したいと思います。
ハンドルネームのHTML
<th>ハンドルネーム</th>
<input  id="h_name" type="text">
VBAのコード
'objIEのHTMLの中からinputのタグをobjに代入しながら確認
For Each obj In objIE.Document.GetElementsByTagName("input")
    'ハンドルネームの記載
    'objに代入されたinputタグのIDがh_nameだった場合
    If obj.ID = "h_name" Then
        'objに代入されたinputタグにhnameに代入したB2のセルの値を入れる
        obj.Value = hname
    End If
上記のVBAのコードの上から順番に説明していきます。

For Each obj In objIE.Document.GetElementsByTagName("input")


上記コードを日本語で訳すと「For Eachを使ってobjという変数にobjIEのドキュメント内からinputというタグ名の要素を代入しながら取り出してきてください。」ということになります。
つまり起動したIEのHTML内のinputというタグを全て確認してくれるのです。

If obj.ID = "h_name" Then


この部分では「ForEachでobjに代入されたinputタグのID属性がh_nameの時」という処理になりますのでHTMLのinputタグのid属性を見てみてください。
h_nameとなっていますよね?
なのでid属性がh_nameになっているハンドルネームのinputタグに次の処理をします。

ではその次の処理にあたる【obj.Value = hname】では、【h_nameというIDのinputタグ=ユーザーフォームのハンドルネームの部分】に対して、hnameの変数に代入したB2のセルの内容を入力してくれます。

このようにHTMLのタグと属性からVBAで操作したい要素を特定し、処理をしていきます。
上記の部分を必ず覚えておいてください。
この基本さえわかれば、後はHTMLを確認しながら「どうやって特定して、どうやって処理するか」をVBAでコーディングしてあげるだけで、IEの自動操作は出来るようになるのです。

伏字部分への入力

では次の生年月日の部分に入りますね。
生年月日のHTML
<th>生年月日</th> <input id="birthday" type="password">
VBAのコード
'生年月日の入力 'objに代入されたinputタグのIDがbirthdayだった場合 If obj.ID = "birthday" Then 'objに代入されたinputタグにbrdに代入したB3のセルの値を入れる。 obj.Value = brd End If
こちらも先程のハンドルネームと同じです。

If obj.ID = "birthday" Then


上記の部分でobjに代入された要素のIDがbirthday=True(真)の場合、次の処理を実行と記載します。

obj.Value = brd


この部分でbirthdayというIDのinputタグにbrdに代入したB3のセルの値を入力します。

この生年月日の入力のポイントとしては、先程のハンドルネームの入力の前にしている【For Each】と同じ【For Each】の中での処理になっています。
最初にしているForEachではinputタグ全てをまわっているので、何度も1からinputタグをまわるより、同じForEach内でそれぞれの要素に処理をした方が効率的ですよね?

なので「同じタグ=1つのForEach内での処理」という事を心がけましょう。
ただし、例えば検索ボタンも同じinputタグだった場合、他のinputの要素への文字の入力より先に検索ボタンを押してしまうと、当然検索のキーワードなどは入ってないのに検索しますのでエラーになりますよね?
そういう時には一度ForEachをNextで閉じた後、新しく作ったForEachで同じタグの検索ボタンを実行することが必要になる場合もあります。

ラジオボックスの選択

では次に性別の選択を説明します。
性別の選択のHTML
<th>性別</th> <input name="sex" value="男性" type="radio"> 男性  <input name="sex" value="女性" type="radio"> 女性
VBAのコード
'性別の選択 'objに代入されたinputタグのInnerTextがB4のセルと同じだった場合 If Trim(obj.Value) = Worksheets("情報").Range("B4") Then 'objに代入されたinputタグを選択する obj.Click End If
こちらの性別の選択に関しては、ページ上でラジオボックスになっています。
このラジオボックスは単純にクリックしてしまえば選択できますので、

If Trim(obj.Value) = Worksheets("情報").Range("B4") Then


objに代入されたinputタグのvalue属性の値がB4のセルと同じだった場合に処理します。

obj.Click


上記でobjに代入されたinputタグをクリックし、選択します。

注意点としてはTrim()を使っているところです。
例えばオブジェクトの特定の際、今回だとinputタグのvalue要素の男性の文字の前後にスペースが入っていた場合、一致しないとマクロが判断してしまいますので、Trim()でobj.Valueを囲んであげる事で文字の前後にあるスペースを削除してくれます。

他にもReplace()を使った方法などもありますが、それはまた別の記事で紹介したいと思います。

チェックボックスの選択

では最後に使ったことのあるOSの選択を解説したいと思います。
使用した事のあるOSの選択のHTML
<th>使用したことのあるOS</th> <input name="os" value="Windows" type="checkbox"> Windows  <input name="os" value="Mac" type="checkbox"> Mac OSX  <input name="os" value="Linux" type="checkbox"> Linux
VBAのコード
'使用した事のあるOSの選択 'B5のセルが空白じゃなかった場合 If Range("B5") <> "" Then 'objに代入されたinputタグのInnerTextがB5のセルと同じだった場合 If obj.Value = Worksheets("情報").Range("B5") Then 'objに代入されたinputタグにチェックを入れる obj.Checked = True End If End If 'C5のセルが空白じゃなかった場合 If Range("C5") <> "" Then 'objに代入されたinputタグのInnerTextがC5のセルと同じだった場合 If obj.Value = Worksheets("情報").Range("C5") Then 'objに代入されたinputタグにチェックを入れる obj.Checked = True End If End If 'D5のセルが空白じゃなかった場合 If Range("D5") <> "" Then 'objに代入されたinputタグのInnerTextがD5のセルと同じだった場合 If obj.Value = Worksheets("情報").Range("D5") Then 'objに代入されたinputタグにチェックを入れる obj.Checked = True End If End If Next
最後のこちらはチェックボックスになっています。
こちらのチェックボックスは複数選択可能なので、配布しているExcelでも3つの項目を用意し、Excelの5列目に記載しているOSをチェックするようにしています。

では解説です。

If Range("B5") <> "" Then


上記ではB5乗せるが空白ではなかった場合、次の処理を実行という記載になっています。
VBAの基本として、代入と等号は【=】、不等号は【<>】という事を覚えておいてください。

If obj.Value = Worksheets("情報").Range("B5") Then


ここでは「objに代入されているinputタグのvalue要素がB5のセルと一致した時、次の処理を行なう」ということになります。

上記2つのIfがTrueの時、次の処理を実行します。

obj.Checked = True

「B5のセルの値と同じvalue要素を持ったinputタグのチェックボックスのチェックを入れる」という処理をします。

このときの注意点としては【Checked = True】を訳して「チェックしている状態?⇒はい」というように、チェックボックスをチェックしてあげる必要があります。

残りの2つはC5やD5を上記の解説した部分と同じように処理しているだけです。

最後にNextでinputタグを代入していたForEachを閉じてあげる事を忘れないでくださいね。

最後に

かなり長くなりましたが、ここまでは大丈夫でしょうか?
このFor Eachで全てのタグの中からIfで特定する」ということを覚えておけば基本的には応用するとIEの自動操作が出来るようになりますので、今回の記事ではこの事を覚えて次に進んでください。

次回はメモ欄への記載とExcelのバージョンの選択を解説していこうと思います。