ExcelのVBAについて質問します。


外部プログラムの起動(Shell関数?)とキー操作(SendKeyステートメント?)になるかなと思っています。が、違うかも・・・。

具体的にVBAで実現したいことは、マクロを実行すると、

 ブラウザ(IE)を起動
⇒Googleのトップページにアクセス(IEのホームにGoogleを設定しないこと!)
⇒そこで「Excel」と投入し、「検索」のボタンを押す
⇒ブラウザ(IE)を閉じる

となることです。
※検索結果はひとまず無視でいいです。

ここまでの流れをVBAで記述し、完全に動かしたいのですが、もしこのように記述すればいいのでは!というのがありましたら、お願い致します。
(すぐに質問を終了したりはしないので宜しくです。最低2日は終了しません。)

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/12/17 22:35:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント35pt

こんな感じでどうでしょう。

IE終了が必要でしたらコメントアウトの部分を復活させてください。

Sub google()
    Dim IE As Object
    
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.Navigate ("http://www.google.co.jp/")

    'Busy解除まで待つ
    i = 0
    Do Until IE.busy = False Or i > 1000
        i = i + 1
    Loop

    IE.document.all.q.Value = "EXCEL"
    IE.document.all.btnG.Click

'    IE.Quit                      'IE終了処理
'    Set IE = Null
End Sub

id:miku1973

すごいです!

完璧にできていました!!

参考にします!

勉強になります!

2008/12/11 04:33:51
id:ardarim No.2

回答回数897ベストアンサー獲得回数145

ポイント35pt

IEであれば、オブジェクトとして操作可能ですので、Shell関数で起動するよりも詳細な操作が可能です。

サンプルを示します。

Googleの検索窓にキーワードを入力する方法は色々あります。

Option Explicit
Option Base 0

Sub test()

    Dim objIE As Object
    
    Set objIE = CreateObject("InternetExplorer.Application")
    
    objIE.Visible = True
    
    objIE.navigate "http://www.google.co.jp"
    
    ' ページロード待ち
    Do While objIE.busy And objIE.readystate < 2
    Loop
    
    ' キーワードを入力
    objIE.document.getelementsbyname("f").Item(0).q.Value = "Excel"
    
    ' 検索ボタンを押す(フォームをsubmit)
    objIE.document.getelementsbyname("f").Item(0).submit
    
    ' ページロード待ち
    Do While objIE.busy And objIE.readystate < 2
    Loop
    
    MsgBox "検索完了"
    
    objIE.Quit
    
    Set objIE = Nothing

End Sub

一番確実なのは、最初からキーワード込みのURLを表示することです。

Option Explicit
Option Base 0

Function GetSearchUrl(ByVal searchKeyword As String) As String

    Dim i As Integer
    Dim searchUrl As String

    searchUrl = "http://www.google.com/search?ie=shift_jis&q="
    searchKeyword = StrConv(searchKeyword, vbFromUnicode)
    For i = 1 To LenB(searchKeyword)
        searchUrl = searchUrl & "%" & Right$("0" & Hex$(AscB(MidB$(searchKeyword, i, 1))), 2)
    Next i

    GetSearchUrl = searchUrl
    
End Function

Sub test2()

    Dim objIE As Object
    
    Set objIE = CreateObject("InternetExplorer.Application")
    
    objIE.Visible = True
    
    objIE.navigate GetSearchUrl("Excel")
    
    ' ページロード待ち
    Do While objIE.busy And objIE.readystate < 2
    Loop
    
    MsgBox "検索完了"
    
    objIE.Quit
    
    Set objIE = Nothing

End Sub
id:miku1973

ありがとうございます!!

' 検索ボタンを押す(フォームをsubmit)

objIE.document.getelementsbyname("f").Item(0).submit


下のコメントにも追加で書いたのですが、

nameがないsubmitボタンをクリックする場合はどうすればよいでしょうか?

(Googleではないケースですが・・・)

もしわかりましたら、追加回答もらえれば幸いです。

2008/12/11 05:10:17

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 rome0315 13 10 3 2008-12-10 23:37:32
2 misha-sakuraba 4 3 0 2008-12-11 00:33:12
  • id:takerudayo
    確認ですが、あくまでも質問に書かれている手順をふまないと駄目ですか?
    googleの検索結果を出すURLでいきなりIEを開くとかでよければ、簡単そうですが・・・
  • id:Mook
    なぜに VBA なのでしょうか。
    手動で単語を入力するならスクリプト(VBS)などの方がクリックだけで実行できて
    簡単だと思うのですが。

    それとも、セルに入力した値を次々に検索するようなことをしたいのでしょうか。
    すでに回答されていると思いますが、InternetExplorer オブジェクトでかなり
    自由な操作ができます。
  • id:miku1973
    この質問は、実はたくさんのVBA記述をしている中のほんの1機能です。
    Googleはあくまで例でして、本当にやりたいことは違うことなんです。

    なので、
    > googleの検索結果を出すURLでいきなりIEを開くとかでよければ、簡単そうですが・・・
    はダメで、
    > 手動で単語を入力するならスクリプト(VBS)などの方がクリックだけで実行できて
    も避けたいです。
  • id:miku1973
    pahooさんの
    IE.document.all.btnG.Click
    の部分ですが、Googleの場合はnameがbtnGなのでこれでいいと思うのですが、
    もし、nameがないsubmitボタンをクリックする場合はどうすればよいでしょうか?
    (ちなみにページ内にsubmitボタンは1つしかないケースです)

    もしわかれば追加回答いただければ幸いです。
  • id:ardarim
    objIE.document.getelementsbyname("f").Item(0)
    は、ボタンではなく、フォームオブジェクトです。そのため、上のコードは厳密には「検索ボタンを押す」ではなく直接「フォームをsubmitする」ものになっています。(結果的には同じ動作です)
    そのため、「検索ボタン(Googleの場合はbtnG)」に名前が付いていなくても form.submit でフォームを実行できます。

    ちなみにフォーム自体に名前がない場合は
    objIE.document.getElementsByTagName("FORM").Item(0)
    でフォームオブジェクトが得られます。
    フォームが複数ある場合はItem(n)のnで指定します。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません