エクセルVBAでIEを操作するクラスに検索入力&ボタンクリックのメソッドを追加する方法


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方をお伝えしております。

前回の記事はこちら。

エクセルVBAでIEを操作するクラスにWebページのテーブルデータをシートに書き出すメソッドを追加する
エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方のシリーズです。今回はエクセルVBAによるIEを操作するクラスにWebページのテーブルデータをシートに書き出すメソッドを作成していきます。

エクセルVBAのIEクラスにWebページのテーブルデータをシートに書き出すメソッドを追加しました。

さて、今回は少し方向性を変えまして、検索窓へのテキスト入力とボタンクリックをしてみたいと思います。

ということで、エクセルVBAでIEを操作するクラスに検索窓の入力&ボタンクリックのメソッドを追加する方法です。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

では、まずはおさらいから。

IEを操作するクラスIEObjectはこちらです。

Public IE As InternetExplorer
Public Document As HTMLDocument

Private Sub Class_Initialize()
    Set IE = New InternetExplorer
    IE.Visible = True
End Sub

Private Sub Class_Terminate()
    IE.Quit
End Sub

Public Sub Navigate(ByVal url As String)
    IE.Navigate url
    Wait
    Set Document = IE.Document
End Sub

Public Sub Wait()
    Do While IE.Busy = True Or IE.readyState < READYSTATE_COMPLETE
        DoEvents
    Loop   
End Sub

Public Sub WriteTableData(ByVal table As HTMLTable, ByVal cell As Range)
            
    Dim i As Long: i = 0
    Dim tr As HTMLTableRow
    For Each tr In table.getElementsByTagName("tr")
            
        Dim j As Long: j = 0
        Dim th As HTMLTableCell
        For Each th In tr.getElementsByTagName("th")
            cell.Offset(i, j).Value = th.innerText
            j = j + 1
        Next th
        
        Dim td As HTMLTableCell
        For Each td In tr.getElementsByTagName("td")
            cell.Offset(i, j).Value = td.innerText
            j = j + 1
        Next td
                    
        i = i + 1
    Next tr
    
End Sub

前回作成したのは、WriteTableDataメソッドで、table要素を表すHTMLTableオブジェクトと、書き出しの基点となるRangeオブジェクトを渡すと、テーブルデータをセルに書き出すというものでした(今回の内容で関わるメンバーだけ掲載しています)。

確認用の標準モジュールのSubプロシージャがこちらです。

Sub MySub()
    
    Dim ieObj As IEObject: Set ieObj = New IEObject
    
    With ieObj
        .Navigate "https://info.finance.yahoo.co.jp/ranking/?kd=4"
        .WriteTableData .Document.getElementsByTagName("table")(0), Sheet1.Range("A1")
    End With
        
End Sub

Yahoo!で検索をする機能をクラスに追加する

今回は、「Yahoo!JAPAN」の検索窓から任意の文字列で検索をするという処理を作成していきます。

Yahoo! JAPAN
日本最大級のポータルサイト。検索、オークション、ニュース、天気、スポーツ、メール、ショッピングなど多数のサービスを展開。あなたの生活をより豊かにする「課題解決エンジン」を目指していきます。

Yahoo!JAPANの検索窓と検索ボタン

検索窓は「srchtxt」というidを持つtextタイプのinput要素、検索ボタンは「srchbtn」というidを持つsubmitタイプのinput要素です。

なので

  • idで要素を取得して値を入力するメソッド
  • idで要素を取得してクリックするメソッド

この2つを作って組み合わせていけば良さそうです。

詳しくは以下記事もご参考くださいませ。

【エクセルVBAでIE操作】IEで検索窓にキーワードを入力して送信する方法
初心者向けエクセルVBAでIEを操作するシリーズです。今回はIEを操作してWEBページ内の検索窓に任意のキーワードを入力して送信する方法をお伝えします。GoogleChromeの検証機能も活用しますよ!

指定のidの要素の値を入力するメソッド

では、まず指定のidの要素にテキストを入力するメソッドからです。

引数としては、要素を特定するためのidと、入力する値をいずれも文字列型で渡します。

Sub InputTextById(ByVal id As String, ByVal keyword As String)
    
    Document.getElementById(id).Value = keyword
    
End Sub

けっこうシンプルですね。

指定のidの要素をクリックするメソッド

次に、指定のidの要素をクリックするメソッドです。

こちらはクリックするだけなので、引数はidだけですね。

Sub ClickButtonById(ByVal id As String)
    
    Document.getElementById(id).Click
    Wait
    Set Document = IE.Document
    
End Sub

クリックすると画面遷移しますので、既にあるWaitメソッドを拝借して読み込み待ちをしています。

また、Documentのセットもします。

Yahoo!検索を行うメソッドの動作確認

では、Yahoo!で検索を行うメソッドの実行確認していきましょう。

以下のSubプロシージャを実行します。

Sub MySub()
    
    Dim ieObj As IEObject: Set ieObj = New IEObject
    
    With ieObj
        .Navigate "https://www.yahoo.co.jp/"
        .InputTextById "srchtxt", InputBox("キーワードを入力してください")
        .ClickButtonById "srchbtn"
    End With
    
    Stop
    
End Sub

実行すると、まず入力ダイアログが表示されます。

Yahoo!検索するキーワードを入力するダイアログ

キーワードを入力して「OK」をクリックすると、IEでキーワードの入力とボタンクリックが動作して、以下の検索結果ページが表示されました。

IEを操作してYahoo!検索結果ページを表示

まとめ

以上、エクセルVBAでIEを操作するクラスにYahoo!検索を行う入力&クリックのメソッドを追加する方法をお伝えしました。

なんとなく、入力とクリックを同じメソッドに機能持たせたくなってしまう気もしますが、そこはぐっとこらえて別々にします。

というのも、メソッドは汎用性があるほうが良いので、他のケースでも使えるようにしといたほうがいいんですね。

次回は、ログイン処理をするメソッドの作り方を紹介します。

エクセルVBAでIEを操作するクラスにログイン処理をするメソッドを追加する方法
エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方をお伝えしております。今回は、エクセルVBAでIEを操作するクラスに、ログイン処理をするメソッドを追加する方法をお伝えします。

どうぞお楽しみに!

連載目次:エクセルVBAでIEを操作するクラスを作る

エクセルVBAでInternetExplorerを操作してWebスクレイピング、まだまだ現役で必要となる現場もあるでしょう。このシリーズでは、IEを使ったスクレイピングをするときに便利なクラスの作り方をお伝えします。
  1. エクセルVBAでIEを操作するもっとも簡単なクラスを作成する方法
  2. エクセルVBAでIEを操作するクラスでWebページを開くメソッドを追加する
  3. エクセルVBAでIEを操作するクラスに読み込み待ちとドキュメント取得の機能を追加する方法
  4. エクセルVBAでIEを操作するクラスにname属性で取得した要素から内容を取り出すプロパティを作成
  5. エクセルVBAでIEを操作するクラスにリンクテキストでa要素を探してリンクする方法
  6. エクセルVBAでIEを操作するクラスにテーブルのデータを取得するメソッドを追加する方法
  7. エクセルVBAでIEを操作するクラスにWebページのテーブルデータをシートに書き出すメソッドを追加する
  8. エクセルVBAでIEを操作するクラスに検索入力&ボタンクリックのメソッドを追加する方法
  9. エクセルVBAでIEを操作するクラスにログイン処理をするメソッドを追加する方法
  10. エクセルVBAによるIEを操作するクラスに指定秒数の待ち時間を入れるメソッドを追加する

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