Excel シート上に入力したキーワードを Google、Yahoo で一括検索するマクロ(Excel VBA)について以前に記事を書きました。
何か調べるときはもっぱらググります(Google で検索します)。Google が検索エンジンの主流になった今 Yahoo で検索する頻度は以前と比べて減りました。ただそれでも全くないわけではありません。Google と Yahoo 両方でキーワード検索することはあります。さて、Excel シート上でキーワード入力して Google、Yahoo 両方で一括で検索するマクロ(Excel VBA)を考えてみました。1、Excel シート上で入力したキーワードを Google、Yahoo で一括検索する仕組みまず、どのような仕組みか説明しますね。以下のような Excel シートに検索キ... Excel シート上で入力したキーワードを Google、Yahoo で一括検索するマクロ(Exce... - My タックスノロジー |
キーワードを Excel シートに入力して検索ボタンを押せば、ブラウザーが2つ開いてそれぞれ Google での検索と Yahoo での検索をやってくれるというもの。
今日は、このマクロのプログラミングコードについて説明します。
1、全プログラミングコード
先回の記事でも載せましたが、Excel VBA の全プログラミングコードを示します。
*なお、このコードは2018年4月13日時点で有効に動作したものとしてご理解下さい。
Google、Yahoo のサイトの HTMLのタグを一部拾ってコードに組み込んであるので、サイトのHTMLが変わると動作しなくなる可能性があります
1つの標準モジュールの中に2つのプロシージャを作ってあります。
Sub Google_Yahoo_Search プロシージャ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Sub Google_Yahoo_Search() Dim IE1 As InternetExplorer Dim IE2 As InternetExplorer Dim objTAG As Object Dim Keyword Keyword = Worksheets("キーワード検索").Cells(4, "D") '検索キーワードを変数 Keyword に格納' Set IE1 = CreateObject("InternetExplorer.Application") 'インターネットエクスプローラをIE1に格納' IE1.Visible = True 'インターネットエクスプローラを見えるようにする' IE1.Navigate2 "https://www.yahoo.co.jp/" 'Yahooを指定' Call Wait(IE1) IE1.document.getElementById("srchtxt").Value = Keyword '検索ボックスにキーワード入力' IE1.document.getElementById("srchbtn").Click '検索ボタンをクリック' Call Wait(IE1) Set IE2 = CreateObject("InternetExplorer.Application") 'インターネットエクスプローラをIE2に格納' IE2.Visible = True 'インターネットエクスプローラを見えるようにする' IE2.Navigate2 "https://www.google.co.jp/" 'Googleを指定' Call Wait(IE2) IE2.document.getElementById("lst-ib").Value = Keyword '検索ボックスにキーワード入力' IE2.document.getElementById("mKlEF").Click '検索ボタンをクリック' Call Wait(IE2) End Sub |
Sub Wait プロシージャ
1 2 3 4 5 6 7 |
Sub Wait(objIE As Object) Do Until (objIE.Busy = False) And (objIE.ReadyState = 4) DoEvents Loop End Sub |
2、プログラミングコードの説明
インターネット操作を行うためには、まずインターネット操作ができる状態にしなければなりません。
VBE(エディタ)を開き(Alt + F11)、ツール⇒参照設定で
・Microsoft HTML Object Library
・Microsoft Internet Controls
にチェックを付けます。
Sub Google_Yahoo_Search プロシージャ
変数の定義
1 2 3 4 |
Dim IE1 As InternetExplorer Dim IE2 As InternetExplorer Dim objTAG As Object Dim Keyword |
変数の定義です。
インターネット操作では、ブラウザーや HTML のタグ(<title>~</title> のような開始と終了の表記)で囲まれた文章(ドキュメント)1つ1つがオブジェクト(操作の対象)となります。
変数 IE1、IE2 はブラウザー(インターネットエクスプローラー)を入れるためのオブジェクト変数で、 InternetExplorer型として定義しています。
なお、このInternetExplorerの部分をObject(全てのオブジェクトを対象とした型)として定義しても同様に動作します。
変数 objTAG は HTML のタグで囲まれた文章(ドキュメント)を入れるためのオブジェクト変数で Object型として定義しています。
*Web ページは HTML という言語でプログラミングされています。そして、HTML はタグで囲まれた文章(ドキュメント)の集まりなのです。
Excel シート上に入力したキーワードの読込み
1 |
Keyword = Worksheets("キーワード検索").Cells(4, "D") |
この部分で Excel シート「キーワード検索」の中のセル「D4」に入力したキーワードを変数 Keyword に入れています。
インターネットエクスプローラの設定と Yahoo 、Google へのアクセス
1 2 3 4 5 |
Set IE1 = CreateObject("InternetExplorer.Application") 'インターネットエクスプローラをIE1に格納' IE1.Visible = True 'インターネットエクスプローラを見えるようにする' IE1.Navigate2 "https://www.yahoo.co.jp/" 'Yahooを指定' Call Wait(IE1) |
ここでは、インターネットエクスプローラの設定と 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 のサイトにちゃんとアクセスできるまで次の処理を待つためのプロシージャだと思って下さい。
検索ボックスへのキーワードの入力と検索ボタンのクリック
1 2 3 |
IE1.document.getElementById("srchtxt").Value = Keyword '検索ボックスにキーワード入力' IE1.document.getElementById("srchbtn").Click '検索ボタンをクリック' Call Wait(IE1) |
ここでは、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 は以下のようになっていることが確認できます。
なお、IE2 ではインターネットエクスプローラの設定と Googleサイトへのアクセスを行って、Yahoo の場合と同様に検索ボックスにキーワードを入れて検索ボタンを押しています。
検索ボックス、検索ボタンとも Yahoo と同じく ID で指定しています。
検索ボタンの ID はよく変わるようです。2018年4月13日の時点ではこのように↓なっていました。
ID が変わったら上記コードの ID 名の部分を書き直さなければなりません。
面倒ですが、サイト側の変更には対応しないといけないので。
Sub Wait プロシージャ
1 2 3 |
Do Until (objIE.Busy = False) And (objIE.ReadyState = 4) DoEvents Loop |
このプロシージャは、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)のプログラミングコードについて説明しました。
冒頭にも示した先回の記事です。併せて読んでいただければと思います↓
何か調べるときはもっぱらググります(Google で検索します)。Google が検索エンジンの主流になった今 Yahoo で検索する頻度は以前と比べて減りました。ただそれでも全くないわけではありません。Google と Yahoo 両方でキーワード検索することはあります。さて、Excel シート上でキーワード入力して Google、Yahoo 両方で一括で検索するマクロ(Excel VBA)を考えてみました。1、Excel シート上で入力したキーワードを Google、Yahoo で一括検索する仕組みまず、どのような仕組みか説明しますね。以下のような Excel シートに検索キ... Excel シート上で入力したキーワードを Google、Yahoo で一括検索するマクロ(Exce... - My タックスノロジー |
通常 Excel シート上の操作を行う場合は、変数に普通に数値などを入れれば良いのですがインターネット操作の場合オブジェクト(操作対象)の理解が必要なので難しくなります。
なお、インターネットエクスプローラ(IE)操作については、こちらの書籍がとても参考になります。