【チュートリアル】VBAでIE自動化ツールを作る(その14) 書籍検索ツール開発(実装・マスタ作成)

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

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

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

この章では、これまでに実装した共通部品を使用したIEの自動化ツールの開発を行っていきます。出版社(秀和システム)のWebサイトから指定した条件で新しい本を検索するツールを開発します。前回までに一通りの処理が完成しましたが、リストの項目がインプットシートで選択できません。今回はマスタシートの情報を設定し、インプットシートから選択できるようにします。

1.対象者

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

2.開発環境

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

3.セレクトボックスについて

詳細検索フォームのセレクトボックスをクリックすると選択肢がたくさん表示されます。開発者ツールでHTMLを見ると、「select」タグの中に「option」タグが含まれていることがわかります。「option」タグ1つが1つの選択肢に対応します。「<option>」と「</option>」の中に表示されているテキストがあり、マスタシートの「テキスト」に対応し、「<option>」の中に「value=値」がマスタシートの「value」に対応します。

セレクトボックス2

マスタ

やりたいこととしては、マスタシートのジャンル、シリーズ、並び順についてテキスト、valueを設定することです。開発者ツールに表示されているものをコピーしてもよいのですが、数が多いので大変ですね。今回はVBAのコードで取得しようと思います。

4.セレクトボックスのテキストと値をマスタに設定

セレクトボックスのテキストと値を取得する処理として「SearchBooks」モジュールに以下のコードを追加してください。

'マスタ情報取得(ジャンル)
Private Sub SetGenreList()
   Dim objIE As New InternetExplorer
   
   Dim url As String
   url = ThisWorkbook.Sheets("インプット").Range("D3").Value
   
   'IEでURLのページを表示
   Call IEControl.OpenUrl(objIE, url)
   
   '詳細検索クリック
   Call IEControl.ClickLink(IEControl.GetHtmlObjByQuerySelector(objIE, SELECTOR_SEARCH_DETAIL))
   
   'option要素取得
   Dim i As Integer: i = 3
   Dim objOption As Object
   For Each objOption In IEControl.GetHtmlObjByQuerySelectorAll(objIE, SELECTOR_FORM_GENRE & " option")
       With ThisWorkbook.Sheets("マスタ")
           .Range("A" & i).Value = objOption.innerText
           .Range("B" & i).Value = objOption.Value
           i = i + 1
       End With
   Next
End Sub

実行すると以下のようにマスタシートのジャンルに設定されます。

マスタ2

シリーズと並び順も同様に処理を追加します。

'マスタ情報取得(シリーズ)
Private Sub SetSerieseList()
   Dim objIE As New InternetExplorer
   
   Dim url As String
   url = ThisWorkbook.Sheets("インプット").Range("D3").Value
   
   'IEでURLのページを表示
   Call IEControl.OpenUrl(objIE, url)
   
   '詳細検索クリック
   Call IEControl.ClickLink(IEControl.GetHtmlObjByQuerySelector(objIE, SELECTOR_SEARCH_DETAIL))
   
   'option要素取得
   Dim i As Integer: i = 3
   Dim objOption As Object
   For Each objOption In IEControl.GetHtmlObjByQuerySelectorAll(objIE, SELECTOR_FORM_SERIESE & " option")
       With ThisWorkbook.Sheets("マスタ")
           .Range("C" & i).Value = objOption.innerText
           .Range("D" & i).Value = objOption.Value
           i = i + 1
       End With
   Next
End Sub

'マスタ情報取得(並び順)
Private Sub SetOrderList()
   Dim objIE As New InternetExplorer
   
   Dim url As String
   url = ThisWorkbook.Sheets("インプット").Range("D3").Value
   
   'IEでURLのページを表示
   Call IEControl.OpenUrl(objIE, url)
   
   '詳細検索クリック
   Call IEControl.ClickLink(IEControl.GetHtmlObjByQuerySelector(objIE, SELECTOR_SEARCH_DETAIL))
   
   'option要素取得
   Dim i As Integer: i = 3
   Dim objOption As Object
   For Each objOption In IEControl.GetHtmlObjByQuerySelectorAll(objIE, SELECTOR_FORM_ORDER & " option")
       With ThisWorkbook.Sheets("マスタ")
           .Range("E" & i).Value = objOption.innerText
           .Range("F" & i).Value = objOption.Value
           i = i + 1
       End With
   Next
End Sub

両方実行すると以下のようになります(罫線は実行後に手動で設定しています)。これでマスタシートは完成です。

マスタ3

5.インプットシートに紐付け

マスタシートが完成しましたが、このままではインプットシートから直接選択することができません。それぞれの項目をリストとして選択できるように設定します。

ジャンルの入力セルを選択し、「データの入力規則」から以下のように設定します。「OK」ボタンクリック後にセレクトボックスでマスタシートのジャンルのテキストが選択できるようになれば問題ありません。シリーズ、並び順についても同様に入力規則の設定を行います。ついでに、表示件数についても入力規則の設定を行います。

インプット1

インプット2

セレクトボックスで入力して実行し、詳細検索フォームに選択したテキストが設定されれば問題ありません。


ここまでで、最低限の仕様は満たすことができました。次回は少し踏み込み、安定性や効率を考慮した改良を行います。

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