エクセルVBAについて質問です。次のページにあるようなマクロを作り、追加質問に答えてください。

http://hatena88.web.fc2.com/hatena/newpage2.shtml
なお、現在勉強中ですので、下記の質問の回答者4の方のような解説を付け加えていただいた方には追加ポイントのおまけを付けます。もしそれが必要なければマクロだけでも結構です。よろしくお願いします。
http://q.hatena.ne.jp/1158311664

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/10/29 14:59:26
  • 終了:2006/10/29 17:21:50

回答(1件)

id:ardarim No.1

ardarim回答回数896ベストアンサー獲得回数1442006/10/29 16:54:49

ポイント200pt

ブラウザの起動は、Shellにexe名と、引数を指定することで行います。引数はこの場合URLです。


googleの検索のような場合、入力フォーム(FORM)を使っています。FORMでボタンを押してページを開くような場合、通常はURLの後にクエリー文字列(?以降の文字列)が付きます。フォームには、入力フィールド(この場合検索窓)やボタン(Google検索やI'm Feeling Luckyなど)のようなフォームに付随するコントロール部品があります。クエリー文字列は、これらのコントロール部品に何を入力したかが書かれています。


フォームの内容をURLのクエリー文字列にする場合は、「部品の名前=入力内容」という文字列を部品の数だけ「&」で区切って並べればOKです。それで先頭に「?」をつければクエリー文字列の完成です。


Google検索の場合、検索窓はHTMLソースで

<input type=text name=q ...

となっていて、「q」という名前が付いています。そのため検索語は「q=....」という風に指定します。


同様に、Google検索ボタンには「btnG」、I'm Feeling Luckyボタンには「btnI」という名前が付いています。ボタンには入力できませんが、表示されるボタンの文字列と同じものが入力文字列に相当します。

I'm Feeling Luckyボタンを押した操作と同じことをしたければ、「btnI=I'm Feeling Lucky」という文字列をクエリー文字列に追加すればOKです。但し、URLには通常空白などの文字列は含まないようにしたほうがよいため、空白は%20という風に置き換えて実際には「btnI=I'm%20Feeling%20Lucky」を追加します。


実際にGoogleで「北海道」を入力し、「日本語のページを検索」を選んで検索すると

http://www.google.co.jp/search?hl=ja&q=%E5%8C%97%E6%B5%B7%E9%81%93&lr=lang_ja

というURLが表示されます。

hl=jaは言語(Google日本語版)

q=...は検索文字列(北海道)

lr=lang_jaは「日本語のページを検索」

を意味します。


「q=北海道」となっていないのは、URLに漢字の文字コードをそのまま使わないようにエンコードしているためです。Googleの標準の文字エンコードはUTF-8なので、このサンプルではUTF-8の文字コードを16進数で書いたものです。


ExcelVBAではUTF-8はたぶん使えないので、シフトJISを使って文字エンコードを行います。

Googleは検索文字列の文字エンコードを「ie=...」という文字列をクエリー文字列に追加することで指定できます。シフトJISの場合は「ie=SJIS」を追加すればOKです。


クエリー文字列にはそのほかにもいろいろ種類があります。この辺が参考になります。

Google検索オプション - Google で有効なオプション。


Option Explicit

Const IEpath As String = "c:\program files\internet explorer\iexplore.exe"

Sub QueryAll()

    Dim r As Long, c As Long

    r = 1                                           ' 行1から開始
    Do While Cells(r, 1).Value <> ""                ' 列1のセル値が空白になるまでループ
        c = 1                                       ' 列1から開始
        Do While Cells(r, c).Value <> ""            ' セル値が空白になるまでループ
            Call LaunchIE(Cells(r, c).Value, False) ' セル値を検索語にしてgoogle起動
                                                    '   第2引数 ... True: I'm Feeling Luckyボタン
                                                    '                False: 通常の検索
            c = c + 1                               ' 次の列へ移動
        Loop
        r = r + 1                                   ' 次の行へ移動
    Loop

End Sub

Sub LaunchIE(searchWord As String, ImFeelingLucky As Boolean)

    Dim n As Integer
    Dim urlString As String
    Dim sjis As String

    ' googleのURLと、クエリー文字列をセット
    urlString = "http://www.google.co.jp/search" + GetQueryString(searchWord, ImFeelingLucky)
    
    ' URLを指定してIEを起動
    n = Shell(IEpath + " """ + urlString + """", vbNormalFocus)

End Sub

' 指定された検索語に対するgoogleクエリー文字列を返す
'   SearchWord     ... 検索語
'   ImFeelingLucky ... I'm Feeling Luckyボタンを使うかどうか
Function GetQueryString(searchWord As String, ImFeelingLucky As Boolean) As String

    Dim i As Long
    Dim sjis As String
    Dim QueryString As String
    
    QueryString = ""
    
    QueryString = QueryString + "?hl=ja"            ' 言語(日本語)
    QueryString = QueryString + "&lr=lang_ja"       ' 検索範囲(日本語のページ)
    QueryString = QueryString + "&ie=SJIS"          ' 検索文字列の文字コード(シフトJIS)
    QueryString = QueryString + "&oe=UTF-8"         ' 検索結果の文字コード(UTF-8)
    If ImFeelingLucky Then
        ' I'm Feeling Luckyを押す場合
        QueryString = QueryString + "&btnI=I'm%20Feeling%20Lucky"
    End If
    
    QueryString = QueryString + "&q="               ' 検索文字列
    sjis = StrConv(searchWord, vbFromUnicode)       '     まず文字列をシフトJISに変換
    For i = 1 To LenB(sjis)
                                                    '     1バイトずつ16進数に変換(%xx)
        QueryString = QueryString + "%" + Right$("0" + Hex$(AscB(MidB$(sjis, i, 1))), 2)
    Next i

    GetQueryString = QueryString                    ' クエリー文字列を返す
    
End Function
id:taroemon

丁寧で詳しいご回答ありがとうございます。

大変参考になりました。

2006/10/29 17:19:45

コメントはまだありません

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません