【チュートリアル】VBAでIE自動化ツールを作る(その5) 要素の操作

こんにちは、自動化エンジニアをしています。kozuです。

エクセルVBAによりWebページの要素(テキストボックス、ボタンなど)を操作したり、表示されている情報を取得する自動化ツールの開発方法を紹介します。実際のWebサイトを自動操作し情報を取得するマクロの開発を通して、自動化ツールの開発について学ぶことができます。

本連載では、チュートリアルということでVBAの開発手順から始め、IEの操作についてどのようなページでも共通で使用できるコード(共通部品)を作成します。最初に共通部品を作成しておくことで、自分でIEの自動化ツールを作成する際に少量の実装で効率よく開発できるようになります。

この章では、ページに表示されている要素(ボタンやテキストボックス)を操作する処理を実装します。

1.対象者

ブラウザで定期的に手作業で行っているデータ入力やデータ収集等の作業から開放されたい、楽したいと考えている方を対象に、エクセルVBAで自動化するツールの開発ができるようになることを目指しています。プログラミングの経験がない方でも、コードをコピーすれば開発できるようになっています。

2.開発環境

以下の環境を使用します。
バージョンは異なっていても問題ないと思います。
・OS:Windows10
・エクセル:Microsoft Excel2007
・ブラウザ:InternetExploer11

3.テキストの設定

テキストボックスにテキストを入力します。(その3)で「IEControl」に追加したプロシージャになります。要素取得の処理を別のプロシージャで実装したため、ここでは要素の操作のみ行います。以下の通りに編集してください。「HTMLの要素.Value = 値」でHTML要素にテキストを設定します。

' ************************************************
'  関数名:InputText
'  概要:テキスト入力
'  引数:objHtml(HTML要素オブジェクト)
'       text (入力テキスト)
'  戻り値:なし
' ************************************************
Public Sub InputText(ByVal objHtml As Object, ByVal text As String)
   '値を設定
   objHtml.Value = text
End Sub

4.ボタンクリック

ボタンのクリックを行います。「IEControl」に以下のプロシージャを追加してください。「HTMLの要素.Click」でHTML要素のボタンをクリックします。

' ************************************************
'  関数名:ClickButton
'  概要:ボタンクリック
'  引数:objHtml(HTML要素オブジェクト)
'  戻り値:なし
' ************************************************
Public Function ClickButton(ByVal objHtml As Object) As String
   objHtml.Click

   '3秒待機する
   Wait (3000)
End Function

5.チェックボックスチェック

チェックボックスのチェックを行います。「IEControl」に以下のプロシージャを追加してください。「HTMLの要素.Checked = True/False」でHTML要素のチェックボックスのチェック状態を更新します。

' ************************************************
'  関数名:CheckCheckBox
'  概要:チェックボックスチェック
'  引数:objHtml(HTML要素オブジェクト)
'            isCheck (チェックフラグ)
'  戻り値:なし
' ************************************************
Public Sub CheckCheckBox(ByVal objHtml As Object, ByVal isCheck As Boolean)
   objHtml.Checked = check
End Sub

6.ラジオボタンチェック

ラジオボタンのチェックを行います。「IEControl」に以下のプロシージャを追加してください。「HTMLの要素.Checked = True」でHTML要素のラジオボタンをチェックします。

' ************************************************
'  関数名:CheckRadioButton
'  概要:ラジオボタンチェック
'  引数:objHtml(HTML要素オブジェクト)
'  戻り値:なし
' ************************************************
Public Sub CheckRadioButton(ByVal objHtml As Object)
   objHtml.Checked = True
End Sub

7.セレクトボックスの選択

セレクトボックスの選択を行います。「IEControl」に以下のプロシージャを追加してください。「HTMLの要素.Value= Valueの値」でHTML要素のセレクトボックスをリストから選択します。

' ************************************************
'  関数名:SelectListValue
'  概要:リスト選択
'  引数:objHtml(HTML要素オブジェクト)
'       selectValue (選択値)
'  戻り値:なし
' ************************************************
Public Sub SelectListValue(ByVal objHtml As Object, ByVal selectValue As String)
   objHtml.Value = selectValue
End Sub

8.リンククリック

リンクのクリックを行います。「IEControl」に以下のプロシージャを追加してください。「HTMLの要素.Click」でリンクをクリックします。

' ************************************************
'  関数名:ClickLink
'  概要:リンククリック
'  引数:objHtml(HTML要素オブジェクト)
'  戻り値:なし
' ************************************************
Public Sub ClickLink(ByVal objHtml As Object)
   objHtml.Click

   '3秒待機する
   Wait (3000)
End Sub

9.使用例

最後に上記で紹介した要素の操作をYahoo路線情報のページを対象に操作してみます。

路線情報2

Sub 乗換案内検索()
   Dim objIE As New InternetExplorer
   
   '表示するページのURL
   Dim url As String
   url = "https://transit.yahoo.co.jp/"
   
   'IEでURLのページを表示
   Call IEControl.OpenUrl(objIE, url)
   
   '★要素特定、設定値情報
   
   '出発駅(テキストボックス)
   Dim stationFromId As String: stationFromId = "sfrom"
   Dim stationFrom As String: stationFrom = "東京"
   '到着駅(テキストボックス)
   Dim stationToId As String: stationToId = "sto"
   Dim stationTo As String: stationTo = "秋葉原"
   
   '日時-時(セレクトボックス)
   Dim dateHhId As String: dateHhId = "hh"
   Dim dateHh As String: dateHh = "09"
   '日時-分(セレクトボックス)
   Dim dateMmId As String: dateMmId = "mm"
   Dim dateMm As String: dateMm = "30"
   
   '日時-種類(ラジオボタン)
   Dim dateKindId As String: dateKindId = "tsArr"
   
   '手段-空路(チェックボックス)
   Dim airId As String: airId = "air"
   Dim airCheck As Boolean: airCheck = False
   
   '検索(ボタン)
   Dim searchButtonId As String: searchButtonId = "searchModuleSubmit"
   
   'ルート1(リンク)
   Dim route1Selector As String: route1Selector = "a[href=""#route01""]"
   
   '★ここから操作
   
   '出発駅にテキスト入力
   Call IEControl.InputText(IEControl.GetHtmlObjById(objIE, stationFromId), stationFrom)
   '到着駅にテキスト入力
   Call IEControl.InputText(IEControl.GetHtmlObjById(objIE, stationToId), stationTo)
   
   '日時-時選択
   Call IEControl.SelectListValue(IEControl.GetHtmlObjById(objIE, dateHhId), dateHh)
   '日時-分選択
   Call IEControl.SelectListValue(IEControl.GetHtmlObjById(objIE, dateMmId), dateMm)
   
   '日時-種類チェック
   Call IEControl.CheckRadioButton(IEControl.GetHtmlObjById(objIE, dateKindId))
   
   '手段-空路チェック
   Call IEControl.ChangeCheckBox(IEControl.GetHtmlObjById(objIE, airId), airCheck)
   
   '検索ボタンクリック
   Call IEControl.ClickButton(IEControl.GetHtmlObjById(objIE, searchButtonId))
   
   'ルート1リンククリック
   Call IEControl.ClickButton(IEControl.GetHtmlObjByQuerySelector(objIE, route1Selector))
End Sub

乗換案内検索のプロシージャを実行し動作を確認してください。乗換案内に検索条件を入力し、検索結果のページ遷移後にルート1の情報が以下の画像のように表示されれば問題ありません。

操作結果2


ここまでで基本的な要素の操作ができるようになりました。次回はファイルの保存について説明します。


この記事が気に入ったらサポートをしてみませんか?