Excel VBA を使えば Internet Explorer を操作することができます。
以前に、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 シート上に入力したキーワードを Google、Yahoo で一括検索するマクロ(Excel VBA)について以前に記事を書きました。キーワードを Excel シートに入力して検索ボタンを押せば、ブラウザーが2つ開いてそれぞれ Google での検索と Yahoo での検索をやってくれるというもの。今日は、このマクロのプログラミングコードについて説明します。1、全プログラミングコード先回の記事でも載せましたが、Excel VBA の全プログラミングコードを示します。*なお、このコードは2017年11月28日時点で有効に動作したものとしてご理解下さい。G... Excel シート上で入力したキーワードを Google、Yahoo で一括検索するマクロ(Exce... - My タックスノロジー |
上記リンクで紹介したプログラミングコードをアレンジして、検索した結果の1ページ目を同じ Excel シートに出力することもできます。
今日は、その Excel シートと VBA のコードを紹介します。
*なお Google、Yahoo の HTML コードが変われば動作しなくなる可能性がある点、そもそも Excel VBA での Internet Explorer の操作が不安定な点があることをご理解下さい。
1、システムの仕組みと Excel シート
さて、今回紹介するシステムの仕組みは次のようになっています。
Excel シートの所定のセルにキーワードを入力してマクロを実行すると、
Internet Explorerが起動してまず google で先に入力したキーワードの検索を行い、検索結果1ページ目のタイトルと URL を同じ Excel シートに表示します。
続いて、Yahooでも先に入力したキーワードの検索を行い、同様に検索結果1ページ目のタイトルと URL を Excel シートに表示します。
Excel シートには検索キーワードを入力するセルと検索ボタンが設置してあります。
キーワードを入力後に検索ボタンをクリックすれば、最終的にそのキーワードで Google、Yahoo で検索された1ページ目のタイトルと URL が表示されるということですね。
例えば「軽減税率」と入力して検索した結果は、最終的には次のようになります↓
上側が Google 、下側が Yahoo の検索結果の1ページ目です。
タイトル(左側)と URL(右側) をそれぞれ表示します。
実際にどのように動作するか、 検索キーワードの入力から検索結果の表示までを動画にしましたので確認下さい。
2、VBA によるプログラミングコード
インターネット操作を行うためには、まずインターネット操作ができる状態にしなければなりません。
VBE(エディタ)を開き(Alt + F11)、ツール⇒参照設定で
・Microsoft HTML Object Library
・Microsoft Internet Controls
にチェックを付けましょう。
VBA コードを以下に示します。
全て1つの標準モジュールの中に書いております。
宣言セクション
1 |
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) |
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
Sub Google_Yahoo_Search() Dim IE1 As InternetExplorer 'Internet Explorer型の変数 IE1' Dim IE2 As InternetExplorer 'Internet Explorer型の変数 IE2' Dim obj As Object Dim Keyword Worksheets("キーワード検索").Range("D9:E23").ClearContents 'シートD10~24への入力を消す' Worksheets("キーワード検索").Range("D25:E39").ClearContents 'シートD26~40への入力を消す' Keyword = Worksheets("キーワード検索").Cells(3, "D") '検索キーワードを変数 Keyword に格納' '---------------Google での検索&結果の表示---------------' Set IE1 = CreateObject("InternetExplorer.Application") 'インターネットエクスプローラをIE1に格納' 'IE1 の表示' With IE1 .Visible = True .Top = 0 .Left = 1300 .Height = 1500 .Width = 1000 .resizable = True End With IE1.Navigate2 "https://www.google.co.jp/" 'Googleを指定' Call Wait(IE1) IE1.document.getElementById("lst-ib").Value = Keyword '検索ボックスにキーワード入力' IE1.document.getElementById("mKlEF").Click '検索ボタンをクリック' '検索結果が表示されるまで時間を稼ぐ' Call Wait(IE1) Call Wait(IE1) Call Wait(IE1) Sleep 500 j = 1 With IE1.document For i = 100 To .all.Length - 1 IE1.document.Focus 'タグの名前が H3 の場合の処理' If .all(i).tagName = "H3" Then Worksheets("キーワード検索").Cells(j + 8, 4) = Left(.all(i).innerText, 256) For Each obj In IE1.document.Links If InStr(obj.innerText, .all(i).innerText) > 0 Then L = obj.href Exit For End If Next Worksheets("キーワード検索").Cells(j + 8, 5) = Left(L, 256) j = j + 1 Else End If Next i End With IE1.Visible = False '---------------Yahoo での検索&結果の表示---------------' Set IE2 = CreateObject("InternetExplorer.Application") 'インターネットエクスプローラをIE2に格納' 'IE2 の表示' With IE2 .Visible = True .Top = 0 .Left = 1300 .Height = 1500 .Width = 1000 .resizable = True End With IE2.Navigate2 "https://www.yahoo.co.jp/" 'Yahooを指定' Call Wait(IE2) IE2.document.getElementById("srchtxt").Value = Keyword '検索ボックスにキーワード入力' IE2.document.getElementById("srchbtn").Click '検索ボタンをクリック' '検索結果が表示されるまで時間を稼ぐ' Call Wait(IE2) Call Wait(IE2) Call Wait(IE2) Sleep 500 j = 1 With IE2.document For i = 100 To .all.Length - 1 IE2.document.Focus 'タグの名前が H3 の場合の処理' If .all(i).tagName = "H3" Then Worksheets("キーワード検索").Cells(j + 24, 4) = Left(.all(i).innerText, 256) For Each obj In IE2.document.Links If InStr(obj.innerText, .all(i).innerText) > 0 Then L = obj.href Exit For End If Next Worksheets("キーワード検索").Cells(j + 24, 5) = Left(L, 256) j = j + 1 Else End If Next i End With IE2.Visible = False End 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 |
3、ポイントとなる箇所
コードの詳しい説明は別記事にしようと思います。
今回はざっとした説明だけしておきます。
Google_Yahoo_Search プロシージャの中では、Internet Explorerをオブジェクトとして格納するための変数 IE1、IE2 を定義して使っています。
そして、Google、Yahoo ともに検索ボックスに Excel に入力したキーワードを入力して検索ボタンを押しています。
そのあたりのことについては、冒頭でも紹介したこちらの記事を参考にして下さい⇃
何か調べるときはもっぱらググります(Google で検索します)。Google が検索エンジンの主流になった今 Yahoo で検索する頻度は以前と比べて減りました。ただそれでも全くないわけではありません。Google と Yahoo 両方でキーワード検索することはあります。さて、Excel シート上でキーワード入力して Google、Yahoo 両方で一括で検索するマクロ(Excel VBA)を考えてみました。1、Excel シート上で入力したキーワードを Google、Yahoo で一括検索する仕組みまず、どのような仕組みか説明しますね。以下のような Excel シートに検索キ... Excel シート上で入力したキーワードを Google、Yahoo で一括検索するマクロ(Exce... - My タックスノロジー |
Excel シート上に入力したキーワードを Google、Yahoo で一括検索するマクロ(Excel VBA)について以前に記事を書きました。キーワードを Excel シートに入力して検索ボタンを押せば、ブラウザーが2つ開いてそれぞれ Google での検索と Yahoo での検索をやってくれるというもの。今日は、このマクロのプログラミングコードについて説明します。1、全プログラミングコード先回の記事でも載せましたが、Excel VBA の全プログラミングコードを示します。*なお、このコードは2017年11月28日時点で有効に動作したものとしてご理解下さい。G... Excel シート上で入力したキーワードを Google、Yahoo で一括検索するマクロ(Exce... - My タックスノロジー |
検索結果を Excel シート上に表示するためには、Google、Yahoo ともに HTML の中から、該当する箇所を拾い出さなければなりません。
規則性を探したところ タイトルと URL が H3 タグに含まれていることが分かったので、H3 タグを探し出しそこに含まれるテキストと URL を抽出しています。
そして、それを Excel シートに出力しています。
4、まとめ
今回は、Google、Yahoo ともに検索結果の一覧を表示させてだけですが、用途に応じてもっと便利な使い方もあると思います。
情報収集を自動化するために、検索した結果から必要な個所だけを引っ張り出したりすることも可能です(以前、一度そのようなコードを作ったこともあります)。
ただ、Excel VBA による Internet Explorer の操作はどうしても不安であることもあり、たまにコードがちゃんと実行しないことがあります。
PC 環境の変化によっても動く場合と動かない場合があるかもしれません。
毎回失敗することなく実行するようなコードに改良できれば良いのですが。
なお、インターネットエクスプローラ(IE)操作については、こちらの書籍がとても参考になります。