VBAを使って簡単にグーグル検索!

このQ&Aのポイント
  • エクセルのマクロを使って、簡単にグーグルの検索を行う方法を紹介します。
  • プログラムを起動して、ユーザーフォームにキーワードを入力し、ボタンをクリックするだけで、検索結果が自動的に表示されます。
  • また、検索結果に関連する他のキーワードを自動的に取得し、メモ帳に書き出すことも可能です。
回答を見る
  • ベストアンサー

vbaを使ってグーグル検索をしたい

エクセルのマクロを使用して グーグル検索を出来るようにしたいです。 処理としまして、プログラムを起動すると ユーザーフォームが起動して、テキストボックスがあり テキストボックス内に検索したいキーワードを入力して ボタンをクリックしたら IEが起動して自動で検索結果が表示されるようにしたいのですが テキストボックスに入力したキーワードを どうしても反映させることが出来ない状態です。 出来れば、検索結果の一番下のほうに 「他のキーワード」と言うのがありまして ダイエットで検索すると 「他のキーワード」が ダイエット日記 ダイエット方法 食べ合わせダイエット 骨盤ダイエット ダイエット レシピ ダイエット 運動 どうぶつダイエット ダイエット ブログ バナナ ダイエット 炭水化物ダイエット といったキーワードが出てくるのを メモ帳に自動で書き出すようにも出来ればありがたいです。 わかりにくい説明かもしれませんが よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

 TextBox1 にキーワードを入力し CommandButton1 をクリックしたら、デスクトップの "Google 他のキーワード.txt" に「他のキーワード」が追記されていきます。 '------------------------------------------------------------------- Private Sub CommandButton1_Click()  Dim MyKeyWord As String  Dim objIE As Object  Dim i As Integer  Dim MyDir As String  Dim MyTxt As String  Dim j As Integer  Dim HisKeyWord As String  MyKeyWord = TextBox1.Text   'Internet Explorer の起動  Set objIE = CreateObject("InternetExplorer.Application")  With objIE    'キーワードの入力   .navigate "ht" & "tp://w" & "ww.google.com/"   While .Busy Or .ReadyState <> 4: DoEvents: Wend   .document.forms.Item(0)(1).Value = MyKeyWord   .document.forms.Item(0)(2).Click   While .Busy Or .ReadyState <> 4: DoEvents: Wend   For i = 0 To .document.all.Length - 1    If .document.all.Item(i).className = "e" Then Exit For   Next 'メモ帳の保存先フォルダとファイル名の指定   MyDir = Environ("USERPROFILE") & "\デスクトップ\"   MyTxt = "Google 他のキーワード.txt"    'メモ帳に自動で書き出す   Open MyDir & MyTxt For Append As #1   Print #1, "【キーワード】" & MyKeyWord   If i = .document.all.Length Then    Print #1, "「他のキーワード」はございません。"   Else    For j = 1 To 10     HisKeyWord = .document.all.Item(i + j * 2 + 5).outerText     If HisKeyWord = "12345678910次へ" Then Exit For     Print #1, HisKeyWord    Next   End If   Print #1, Chr(10)   Close #1    'Internet Explorer の終了と テキストボックス の初期化   .Quit  End With  Set objIE = Nothing  TextBox1.Text = ""  TextBox1.SetFocus End Sub

m1r0ku13
質問者

補足

DOUGLAS_さんありがとうございます。 早速なんですが・・・ コードを貼り付けて実行しますと 「MyKeyWord = TextBox1.Text」の部分が黄色くなり オブジェクトが必要ですと出てしまいます。 いろいろ調べてみたのですが 解決できないで居ます。

その他の回答 (5)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.6

>下記フォームに捨てアドレスでかまいませんので  「下記フォーム」が見当たりません。 >メールで数通やり取りしていただけないでしょうか?  こちら(OKWave)では、このような個人交渉は禁止されていないのでしょうか?  もし、よいのでしたら、下記のコメント欄へお返事ください。 http://douglas.blog.shinobi.jp/Entry/1/  なお、この質疑は、問題が解決されたようでしたら、締め切りの手続きをお願いいたします。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.5

>上記記載の通りに行いましたら >ちゃんと実行することが出来ました。 ということは、元々お使いのブックでは、[回答番号:No.1] の マクロ が動かない、何か原因があるのだと存じますが、よくお分かりにならないようでしたら、[回答番号:No.4] で新規に作成されたブックを元々のブックのように作り直されればよいかと存じます。 --------------------------------------------------------------- 【今後のために】  なお、ご参考までに、 ● Excel VBA で インターネットブラウザ を操作する方法 ● [回答番号:No.1] の マクロ がなぜあのような記述になっているか「不思議だなぁ」と思われるかも知れない部分 について解説をしておきます。 --------------------------------------------------------------- ≫≫≫≫ [WebBrowser コントロール] について --------------------------------------------------------------- 1)Excel VBA で インターネットブラウザ を操作するときは、もっぱら「CreateObject("InternetExplorer.Application")」として [WebBrowser コントロール] を使います。  ただし、詳細を解説した Web ページ が余りありませんので、まだまだ独自に開墾しなければならない分野のようです(未開拓分野)。 2)普通は オブジェクト名 を「IE」・「objIE」・「MyIE」などに設定し、 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True ・・ 一連の操作 ・・ objIE.Quit Set objIE = Nothing のようにして使います。  今回は、ブラウザ を表示する必要がありませんので、「objIE.Visible = True」は割愛しました。 3)Excel VBA で [WebBrowser コントロール] を使う場合、!!! 本当はもっと簡便で合理的な方法がある !!! と思うのですが、「未開拓分野」ですので、私自身、まどろっこしい コーディング をしています。 4)「探り方」としましては、逐一 ウォッチ式 を追加して プロパティ の内容を確認していくのが、結局のところ近道で、先ずは、「objIE」を ウォッチ式 に追加して配下の プロパティ を見ていきます([回答番号:No.1] の添付画像)。 5)「objIE」自体は「Internet Explorer」ですから、直下の プロパティ は IE 自体に関しての内容になりましょうから、ご質問の操作の場合には関係ありません。  したがって、「objIE」配下で ウォッチウィンドウ で「+」記号の付いた プロパティ を見ていくと、[Application]・[Document]・[Parent] の3つがあることが分かります。  [Application プロパティ] は IE 自体に関連する内容、更に、[Parent プロパティ] はその「親プロパティ」ですから、今回のような場合は関係ありません。  ということで、目的の プロパティ は [document プロパティ] になりますから、ウォッチ式は [objIE.document] で十分です([回答番号:No.2] の添付画像)。 6)次に [objIE.document プロパティ] 配下を見ていきます。  [objIE.document] は「Web ページのコンテンツ」ですから、それ自体では括りが大き過ぎますので、これも [objIE.document] 配下で ウォッチウィンドウ で「+」記号の付いた プロパティ を見ていき、ケースバイケース で [all]・[anchors]・[forms] などの プロパティ を利用します。 7)今回は、操作の目的上 [all プロパティ] を開きましたので、ウォッチ式は [objIE.document.all] に変更します([回答番号:No.3] の添付画像)。 8)[objIE.document.all プロパティ] には、[constructor]・[ie8_length]・[length]・[Item~~] の4種類の プロパティ しか付いておりませんが、[constructor] には内容がありません。  [length プロパティ] は [Item] の数ですが、「length : 435」となっているのに、ウォッチウィンドウ では、[回答番号:No.3] の添付画像のように [Item 256] までしか表示されませんから、(16)のように、内容を セル に書き出さないと確認できません。もしくは、「objIE.document.all.Item(434)」のような ウォッチ式 を追加して ピンポイント で確認することになります。 ※※本来なら、「objIE.document.all.Item(outerText:="他のキーワード")」というような「名前付き引数」で ピンポイント に ターゲット を絞り込めそうな気もするのですが、私には、その辺りの文法が分かりません。 9)ちなみに、[Item プロパティ] の インデックス は、ウォッチウィンドウ では「Item 1」~「Item 256」となっていますが、コーディング上は数字を1減らして「Item(0)」~「Item(255)」と書きます。  従って、すべての [Item プロパティ] を書き出すには、 For i = 0 To objIE.document.all.Length - 1  Cells(i + 1, 1) = Replace(objIE.document.all.Item(i).~~, "<", "<") Next とします。 --------------------------------------------------------------- 【参考URL】 ●WebBrowser コントロールの概要 http://msdn.microsoft.com/ja-jp/library/w290k23d(VS.80).aspx ●三流君VBAでIE操作 InternetExplorer.Applicationを操作する http://www.ken3.org/cgi-bin/group/vba_ie.asp --------------------------------------------------------------- ≫≫≫≫「className = "e"」の不思議について --------------------------------------------------------------- 10)Google で「ダイエット」を検索します。 11)Internet Explorer で [表示(V)] - [ソース(C)] し、HTML ソース の中から「他のキーワード」を検索すると、2ヶ所見つかります。  前者は、ページ内 の検索結果の前に表示されている「他のキーワード」、後者は検索結果の後に表示されているものです。  HTML ソース の前後を見てみると、それが判ります。 12)ここからは「偶然の産物」ですが。。。  後者の HTML ソース の前後を見てみると ~~~<div class=e>~~~他のキーワード~~~ という記述がありました。 13)(11)の HTML ソース の中から「class=e」を検索してみると他にありません。  「ラッキ~ッ!」ということで、 For i = 0 To .document.all.Length - 1  If .document.all.Item(i).className = "e" Then Exit For Next として「他のキーワード」の行を突き止めました。 14)ちなみに、「objIE.document.all.Item(i)」という ウォッチ式 を追加して、「Exit For」のときの値を見てみると、[回答番号:No.4] の添付画像のように、「className」という プロパティ の値が「"e"」になっています。 15)以上で「className = "e"」の不思議は解けたかと存じます。 --------------------------------------------------------------- ≫≫≫≫「Item(i + j * 2 + 5)」の不思議について --------------------------------------------------------------- 16)実は、(12)以前に、テストの段階では、「For i = 0 To .document.all.Length - 1」の行から「'Internet Explorer の終了と テキストボックス の初期化」の前までを For i = 0 To .document.all.Length - 1  Cells(i + 1, 1) = Replace(.document.all.Item(i).outerHTML, "<", "<") Next などとして、Excel の セル に [outerHTML プロパティ] の値を拾い出したりして、「他のキーワード」前後の値を何とか効率的に拾い出せないものかと試行錯誤しました。 17)(16)で「Replace(~~~, "<", "<")」としているのは、[innerHTML プロパティ] や [outerHTML プロパティ] のような HTML タグ を含む値を Excel の セル に ペースト すると、Excel が勝手に HTML タグ を飲み込んでしまいますので、HTML タグ の中の半角の "<" を全角の "<" に変換するようにしています。 18)(16)に「効率的に拾い出」すと書きましたが、ウォッチウィンドウ で「objIE.document.all.Item(i)」に続く プロパティ の内、使えそうなものを順に Excel の セル に吐き出させてみたところ [outerText プロパティ] の中に、「IE で表示されているままの文字列」を発見しましたので、[outerText プロパティ] を使うことにしました。 19)次に、実際に Excel の セル に吐き出された Replace(.document.all.Item(i).outerText, "<", "<") の中から、「ダイエット日記」~「炭水化物ダイエット 」の行を見つけ、「効率的に拾い出」す式を工夫したのが「(i + j * 2 + 5)」の部分です。 20)以上で「Item(i + j * 2 + 5)」の不思議は解けたかと存じます。 21)なお、検索対象の「キーワード」によっては、「他のキーワード」が3つしかなかったり、全然表示されなかったりしますので、 If HisKeyWord = "12345678910次へ" Then Exit For としました。

m1r0ku13
質問者

お礼

ご親切解説ありがとうございます。 DOUGLAS_さんの人柄を見込みまして 個人的なお願い事がありまして もしよろしければ メールで数通やり取りしていただけないでしょうか? 下記フォームに捨てアドレスでかまいませんので もしよろしければお返事下さい。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.4

>唯一違うのがIE7を使用しているところです。  今、IE7 の マシン で試行してみましたが、やはり、問題なく終了しました。  では、振り出しに戻って、一から始めてみましょう。 1)エクセルで新規ブックを開きます。 2)[Alt] + [F11] で VBE を開き、[挿入(I)] - [ユーザー フォーム(U)] します。 3)[ツールボックス] - [コントロール] - [テキスト ボックス] をクリックし、[UserForm1] の フォーム 上に [TextBox1] を配置します。 4)[ツールボックス] - [コントロール] - [コマンド ボタン] をクリックし、[UserForm1] の フォーム 上に [CommandButton1] を配置します。 5)[回答番号:No.1] の 「Private Sub CommandButton1_Click()」~「End Sub」をマウスでドラッグして選択し、コピー([Ctrl] + [C])します。 6)[CommandButton1] を [右クリック] - [コードの表示(O)] し、現われた コードウィンドウ で、すべて選択([Ctrl] + [A])し、貼り付け([Ctrl] + [V])ます。 7)[F5] キーを押下してマクロを実行します。 8)現われた ユーザーフォーム の テキストボックス に「ダイエット」と入力し コマンドボタン をクリックします。 9)テキストボックス に入力された「ダイエット」の文字が消え、フォーカス が テキストボックス に移ったら成功です。 10)デスクトップ 上に作成された「Google 他のキーワード.txt」を開いてみて、 ------------------------------------------------------------------- 【キーワード】ダイエット ダイエット日記 ・・・・・・・・・・ 炭水化物ダイエット ------------------------------------------------------------------- という記述があれば大成功です。  もし、上記の通りにマクロが進行せず、途中でエラーが出た場合は、現われた VBE の画面で黄色になっている If .document.all.Item(i).className = "e" Then の行の「i」にマウスを当て、「i=57」のような数字が表示されると存じますので、その数字をお知らせください。

m1r0ku13
質問者

お礼

何度もお付き合いいただきありがとうございます。 上記記載の通りに行いましたら ちゃんと実行することが出来ました。 はじめの投稿で 回答してくれる人が居るのかと 心配していましたが DOUGLAS_さんのように出会えてよかったです。 本当にありがとうございます。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

>書き込みできませんと言うエラー発生してしまいます。 >If .document.all.Item(i).className = "e" Then  ん~。。。 おかしいですねぇ~。。。  私の環境でしたら、全く問題なくできるんですけど。。。  ちなみに、私の操作環境は、 ・OS は Windows XP SP3 ・Excel 2003 での VBA ・Windows Internet Explorer 8 が インストール されている という条件です。 ・ひょっとして、お使いの OS が「Mac」みたいなコトでしたら、私はお手上げです。 ・Windows の場合でも、「Vista」でしたら MyDir = Environ("USERPROFILE") & "\デスクトップ\" の行を、 MyDir = "D:\" などの、割と自由にアクセスできそうなフォルダに変更してお試しください。  ということで、「OS」・「Excel」・「IE」の バージョン ぐらいはお示しいただいた方が解決が早いかと存じます。

m1r0ku13
質問者

補足

自分の環境ですが DOUGLAS_さんとほとんど変わらないです。 唯一違うのが IE7を使用しているところです。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

>「MyKeyWord = TextBox1.Text」の部分が黄色くなり >オブジェクトが必要ですと出てしまいます。 【考えられる原因1:「TextBox1」という テキストボックス が存在しない】  ご質問文内に >ユーザーフォームが起動して、テキストボックスがあり >テキストボックス内に検索したいキーワードを入力して >ボタンをクリックしたら とお書きですが、前回答のコードは「テキストボックス」の オブジェクト名 が「TextBox1」、「ボタン」の オブジェクト名 が「CommandButton1」の場合のお話しです。  もし、ユーザーフォーム 上での当該の「テキストボックス」の オブジェクト名 が「TextBox2」とか「TextBox3」になっているのでしたら、前回答のコードの中の「TextBox1」を、すべて本当の オブジェクト名 に置換してください。 【考えられる原因2:コードの貼り付け先が違う】  上記が原因でない場合は、先ず、確認ですが、前回答のコードをどこにコピペされましたでしょうか?  [挿入(I)] - [標準モジュール(M)] で開く コードウィンドウ、つまり、[プロジェクト エクスプローラ] - [標準モジュール] - [Module*] を ダブルクリック して表示される コードウィンドウ でしたら、これは × です。  [プロジェクト エクスプローラ] - [標準モジュール] - [フォーム] - [UserForm*] を ダブルクリック して開いた [UserForm*] のフォーム、あるいは、その上に配置された コントロール を [右クリック] - [コードの表示(O)] して表示される コードウィンドウ でしたら、これは ○ です。

m1r0ku13
質問者

補足

たびたびありがとうございます。 コードの貼り付け場所を言われたとおりに したところ「MyKeyWord = TextBox1.Text」では 問題ないのですが・・・ 今度は、下記のコードで 書き込みできませんと言うエラー発生してしまいます。 If .document.all.Item(i).className = "e" Then

関連するQ&A

  • エクセルのマクロで検索結果を取り込みたい

    エクセルのマクロを使用して グーグル検索の所定のキーワードを取り込むようにしたのですが 処理としまして、プログラムを起動すると ユーザーフォームが起動して、テキストボックスがあり テキストボックス内に検索したいキーワードを入力して ボタンをクリックしたら メモ帳に自動でキーワードを書き込まれるようにしたいです。 出来れば、検索結果の一番下のほうに 「他のキーワード」と言うのがありまして ダイエットで検索すると 「他のキーワード」が ダイエット日記 ダイエット方法 食べ合わせダイエット 骨盤ダイエット ダイエット レシピ ダイエット 運動 どうぶつダイエット ダイエット ブログ バナナ ダイエット 炭水化物ダイエット といったキーワードが出てくるのを メモ帳に自動で書き出すのと 「他のキーワード」で検索すると そこにも「他のキーワード」がありますので それもメモ帳に書き出すようにしたいです。 1層目の「他のキーワード」を書き出すとこまでは 出来たのですが、2層目の「他のキーワード」を書き出す方法がわかりません。 それと、マクロを書いているエクセルファイルを開いたら 自動でマクロを起動できるように出来ますでしょうか? わかりにくい説明かもしれませんが よろしくお願いいたします。

  • googleの検索結果が異なるのはなぜ?

    現在IE10を利用しています。IE10はurl欄に検索キーワード「xxx」を 入れるとgoogleによる検索結果が表示されます。これをAとします。 IE10でwww.google.co.jpとurl欄に直接入力しgoogleにジャンプします。 そこで表示される検索テキストボックスに「xxx」と入力すると検索結果 が表示されます。これをBとします。 IEではなくfirefoxを起動し検索欄に「xxx」と入力すると検索結果が 表示されます。これをcとします。 スマホのgoogleアプリで「xxx」を検索すると検索結果が表示されます。 これをDとします。 さて、ここでおかしなことがあります。以上の検索結果の内 BCDでは、検索される我がホームページがAでは全く検索表示 されません。BCDではトップに表示されるのにAでは全く 表示されないのは何故でしょうか? ie10の閲覧キャッシュを 削除しても同じ結果です。 どなたか分かる方がいましたら教えてください。

  • googleのキーワード検索について

    自分のホームページを作り,googleに登録したのですが,一番出てほしいキーワード(2つ)での検索にかかりません.他のキーワードでの検索ならかかるんです. よりによって一番でてほしいキーワードが検索にかかりません. トップのページにそのキーワードが両方ともテキストで入っているのですが,検索にかからないのです.なぜでしょうか? また検索結果の上位に入れるのに一番いい方法はなんですか?

  • VBAでキーワード検索

    EXCEL(テキスト可)内に書かれた大量のキーワードを 1ワードずつ自動でGoogle検索し、 1ページ目の検索結果のリンクを1つ1つクリックしていき、 検索結果ページ内に、目的の情報があれば取得し、 EXCEL(テキスト可)に出力するといった操作を VBAで自動で行いたいと思っています。 EXCEL2010かEXCEL2000に対応していればOKです。 検索するところまでは分かりましたが、検索結果(1ページ目のみ) のリンクをクリックして、ページ内の目的の情報を取得する といったところをどう記述すればよいかが分かりません。 検索するところまではこことほぼ同じように書きました。 http://vbaie.blog111.fc2.com/?mode=m&no=6 お分かりになる方、アドバイスのほど、よろしくお願いします。

  • アクセスのVBAについて

    win2000、アクセス2000を使用しています。 「検索条件」というフォームのテキストに条件を入力したら、「検索結果」というフォームへ抽出されるようにしたいのです。 条件を入力する際に一部分(キーワード)の入力でも当てはまるデータが抽出されるようにしたいのですが、検索条件を入力するテキストボックスが10ヶ所あり、それぞれにキーワードでの抽出をしたいのです。 DoCmd.OpenForm "検索結果", acNormal, , "[施工年度] Like '*" & t_04.Value & "*'" ※[施工年度] →フィールド名  t_04    →テキスト名 上の状態では、うまくいきましたが、条件が複数ある時はどうやって続けたらよいかわかりません。 単純に And で続けたらエラーがでてうまくいきません。 アクセス初心者のため、うまく説明できず申し訳ありませんが、どうぞよろしくお願いします。

  • Access VBA 他アプリケーション

    Accessのフォームから他アプリケーションを起動するボタンをつくります。 起動したアプリケーションの入力フォームへ、Accessのフォームのテキストボックスの内容を書き込む事はできないでしょうか? 例えば、Accessのフォームに『OKWave』と入力されたテキストボックスと、ブラウザが開くボタンが配置されているとします。ボタンをクリックするとブラウザが起動し、起動したら任意の検索サイトが表示され、そのサイトのフォームに、Accessのフォームのテキストボックスにかかれている、『OKWave』が自動的に入力するようなVBAを書きたいと思います。 よろしくお願いします。

  • 検索のテキストボックス

    検索をかけるときにテキストボックスにキーワードを 入力しますが、クリックすると以前そこに入力したものがずらーっとでてきてしまいます。 便利といっては便利ですが、何を検索かけたのかバレてしまうのがいやです。 これをなくすにはどうしたらよいでしょうか。

  • グーグルのトップ画面の検索で表示される検索件数の期間

    お世話になります。 グーグルのトップ画面の検索窓で、キーワードを入力すると 検索件数の結果が自動表示されますが、 (キーワードの入力中に自動表示されるもののこととです) 件数がカウントされている期間設定はどのくらいなのでしょか? 例えば、前1ヶ月、前1年、または、その他の期間? Ferettなどのキーワードアドバイスツール  http://ferret-plus.com/tkwsearch などで表示される件数結果と 差が大きいので、質問させていただきました。 (Ferettは月間と明記されています) お手数ですがご存知の方がいらっしゃいましたら 何卒よろしくお願いします。

  • XPでGoogleインスタンス検索 できなくなった

    Googleインスタンス検索は、 検索キーワードを入力し始めると、その文字で始まる一般的な検索キーワードの検索結果が Google インスタント検索によって自動的に表示されます。 この機能が、最近になって動作しなくなりました。 Win 7では、動きますが、XPでは動きません。(検索設定において、インスタンス検索はON) XPの方は動きますか? http://www.google.co.jp/

  • google検索の入力BOX

    よろしく教えて下さい。 検索しようと思い、Googleを開いてボックスにキーワードを入力すると、その場所には検索語が入力されず、画面上方のバーのところに入力されます。 これには解消方法はありますか? お願いします。

専門家に質問してみよう