人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: taroemon
●カテゴリ:コンピュータ インターネット
✍キーワード:VBA エクセル ポイント マクロ 勉強
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● ardarim
●200ポイント

ブラウザの起動は、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
◎質問者からの返答

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

大変参考になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ