• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vbaを使ってグーグル検索をしたい)

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

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

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

  • ベストアンサー
  • 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