スポンサーリンク

Excel シート上で入力したキーワードを Google、Yahoo で一括検索するマクロ(Excel VBA) ~コード説明~


Excel シート上に入力したキーワードを Google、Yahoo で一括検索するマクロ(Excel VBA)について以前に記事を書きました。

キーワードを Excel シートに入力して検索ボタンを押せば、ブラウザーが2つ開いてそれぞれ Google での検索と Yahoo での検索をやってくれるというもの。

google-yahoo-search-code_1

今日は、このマクロのプログラミングコードについて説明します。

スポンサーリンク

1、全プログラミングコード

先回の記事でも載せましたが、Excel VBA の全プログラミングコードを示します。

*なお、このコードは2018年4月13日時点で有効に動作したものとしてご理解下さい。

Google、Yahoo のサイトの HTMLのタグを一部拾ってコードに組み込んであるので、サイトのHTMLが変わると動作しなくなる可能性があります

1つの標準モジュールの中に2つのプロシージャを作ってあります。

Sub Google_Yahoo_Search プロシージャ

Sub Wait プロシージャ

2、プログラミングコードの説明

インターネット操作を行うためには、まずインターネット操作ができる状態にしなければなりません。

VBE(エディタ)を開き(Alt + F11)、ツール⇒参照設定で

・Microsoft HTML Object Library
・Microsoft Internet Controls

にチェックを付けます。

google-yahoo-search-code_2

Sub Google_Yahoo_Search プロシージャ

変数の定義

変数の定義です。

インターネット操作では、ブラウザーや HTML のタグ(<title>~</title> のような開始と終了の表記)で囲まれた文章(ドキュメント)1つ1つがオブジェクト(操作の対象)となります。

変数 IE1、IE2 はブラウザー(インターネットエクスプローラー)を入れるためのオブジェクト変数で、 InternetExplorer型として定義しています。

なお、このInternetExplorerの部分をObject(全てのオブジェクトを対象とした型)として定義しても同様に動作します。

変数 objTAG は HTML のタグで囲まれた文章(ドキュメント)を入れるためのオブジェクト変数で Object型として定義しています。

*Web ページは HTML という言語でプログラミングされています。そして、HTML はタグで囲まれた文章(ドキュメント)の集まりなのです。

Excel シート上に入力したキーワードの読込み

この部分で Excel シート「キーワード検索」の中のセル「D4」に入力したキーワードを変数 Keyword に入れています。

インターネットエクスプローラの設定と Yahoo 、Google へのアクセス

ここでは、インターネットエクスプローラの設定と Yahoo サイトへのアクセスを行っています。

Set IE1 = CreateObject(“InternetExplorer.Application”)

によってインターネットエクスプローラ(オブジェクト)を作ってオブジェクト変数である IE1 に入れています。

変数の前に Set を付けなればならないので注意しましょう。

IE1 = CreateObject(“InternetExplorer.Application”)

としてはいけません。

IE1.Visible = True

とすることで、インターネットエクスプローラが表示される(目に見える)ようになります。仮に IE1.Visible = False とすればインターネットエクスプローラは表示されません。

IE1.Navigate2 “https://www.yahoo.co.jp/”

とすることで Yahoo の URL にアクセスします。

Call Wait(IE1)

とすることで Wait プロシージャを呼び出しています。

Wait プロシージャについては下で説明します。Yahoo のサイトにちゃんとアクセスできるまで次の処理を待つためのプロシージャだと思って下さい。

検索ボックスへのキーワードの入力と検索ボタンのクリック

ここでは、Yahoo の検索ボックスへのキーワード入力と検索ボタンのクリックを行っています。

IE1.document は、Yahoo サイトの HTML のドキュメント(タグで囲まれた中身)を意味します。

getElementById(“srchtxt”).Value はドキュメントのうち ID が “srchtxt” であるもの(検索ボックス)の値を表しています。

Yahoo のサイトを開いてソース(HTML)を表示させると検索ボックスの ID が”srchtxt”となっていることが分かるので、そのIDを指定しているのです。

そして、検索ボックスに何も入れていない状態だと Value  は空になっているので、IE1.document.getElementById(“srchtxt”).Value = Keyword とすることで、先ほど Excelシートから読み込んだ Keyword を検索ボックスの値として入れてあげるのです。

getElementById(“srchbtn”).Click はドキュメントのうち ID が”srchbtn”であるもの(検索ボタン)をクリックすることを意味します。

なお、HTML を確認すると検索ボックス、検索ボタンの ID は以下のようになっていることが確認できます。

google-yahoo-search-code_3

なお、IE2 ではインターネットエクスプローラの設定と Googleサイトへのアクセスを行って、Yahoo の場合と同様に検索ボックスにキーワードを入れて検索ボタンを押しています。

検索ボックス、検索ボタンとも Yahoo と同じく ID で指定しています。

検索ボタンの ID はよく変わるようです。2018年4月13日の時点ではこのように↓なっていました。

ID が変わったら上記コードの ID 名の部分を書き直さなければなりません。

面倒ですが、サイト側の変更には対応しないといけないので。

Sub Wait プロシージャ

このプロシージャは、Sub Google_Yahoo_Search プロシージャから呼び出されて動作するものです。サイトにアクセスした際にそのサイトがちゃんと読み込みされるまで次の処理を待たせます。

サイトがちゃんと読み込まれる前に VBA が次の処理を行ってしまうと、処理が上手くいかないためそれを防ぐためのものです。IE.Busy はオブジェクト(objIE)の Busy プロパティを表しており、Webページが読み込み中かどうかを調べています。

objIE.Busy = False とすることでオブジェクト(objIE)は読み込み中ではない(読込み完了している)ことを意味します。

objIE.ReadyState はドキュメント(HTML の1つ1つの要素)の読み込みの状態を表しており、0~4の整数で指定します。

objIE.ReadyState= 4 とすることでオブジェクト(objIE)は読み込みは完了していることを意味します。

DoEvents は処理を OS に渡す操作となります。

——————–
Do Until (objIE.Busy = False) And (objIE.ReadyState = 4)
     DoEvents
Loop
——————–

とすることで、IE1、IE2 をobjIEとして受け取ってそれらがちゃんと表示されるまで(objIE.Busy = False かつ objIE.ReadyState = 4 となるまで)DoEvents を繰り返します。

つまり Do Loop を使うことでサイトがちゃんと表示されるまでずっと OS に処理を渡し続けて(DoEvents)、次の VBA 操作を行わせないようにしているのです。

3、まとめ

Excel シート上に入力したキーワードを Google、Yahoo で一括検索するマクロ(Excel VBA)のプログラミングコードについて説明しました。

冒頭にも示した先回の記事です。併せて読んでいただければと思います↓

通常 Excel シート上の操作を行う場合は、変数に普通に数値などを入れれば良いのですがインターネット操作の場合オブジェクト(操作対象)の理解が必要なので難しくなります。

なお、インターネットエクスプローラ(IE)操作については、こちらの書籍がとても参考になります。