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

Excel2007 Webクエリ機能についてご質問いたします。

Webクエリを用いて、Google, Yahooの任意の検索結果の反映を確認する目的となります。
ここでの任意とは検索キーワードとなり、この値はセル上にパラメータとして定義しております。

以下、作成したクエリとなります。
Googleはうまくいくのですが、Yahooはクエリが実行される際に文字化けを起こしてしまい、うまくいきません。

http://search.yahoo.co.jp/search/?p=["Yahoo", "Search Query"]
http://www.google.co.jp/search?q=["Google", "Search Query"]

添付画像はパラメータに実際の値が入った例ですが、
Yahooは表示されているような文字化けがおこります。

もし解決方法がありましたら、ご教示いただけますと幸いです。
よろしくお願いいたします。

1333545025
●拡大する

●質問者: mithmarc
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ken3memo
●250ポイント

yahooで漢字(2バイトコード)をうまく自動変換してくれないみたいなので、
http://search.yahoo.co.jp/search?p=%E6%B4%A5%E8%BB%BD%E3%83%AA%E3%83%B3%E3%82%B4
と渡すと、OKみたいです。

なので、
【ハウツー】Excel VBAでWebサービス - ExcelでJScriptの機能を利用しよう (1) はじめに | パソコン | マイナビニュース
を参考にして、

津軽リンゴを%E6%B4%A5%E8%BB%BD%E3%83%AA%E3%83%B3%E3%82%B4に変換して、
q=の後ろにつなげて Webクエリーに渡してみては?

'VBA から javaScriptのencodeURIを使うテスト
' 先に http://news.mynavi.jp/articles/2012/03/25/vba/index.html を見てください。
'エンコード元の文字列を受け取り、javaScriptのencodeURIで変換して返す
Function JavaScript_encodeURI(strMOJI As String) As String

  '検索文字をJavaScriptのencodeURI関数で作る
 Dim strPARA As String  'パラメーター
 Dim sc As Object
 Set sc = CreateObject("ScriptControl")
 sc.Language = "Jscript"  'JavaScriptを指定(書き間違えないでね)
 strPARA = sc.CodeObject.encodeURI(strMOJI) 'encodeURI関数を呼ぶ
 Set sc = Nothing
 
 Debug.Print strPARA
 JavaScript_encodeURI = strPARA  '変換結果を返す

End Function

Sub MAIN0405()

  '検索文字を入力 ※本当は、ここはセルから取得ですね・・・
 Dim strWORD As String
 strWORD = InputBox("キーワード=", "入力", "津軽リンゴ")

  '変換処理を呼ぶ
 Dim strPARA As String
 strPARA = JavaScript_encodeURI(strWORD)  'キーワードを渡し結果を受け取る
 
  '確認 手抜きで Shell でWebページを表示する
 Dim strURL As String
  'URL+変換したパラメーターでサーチする
 strURL = "http://search.yahoo.co.jp/search?p=" & strPARA
 Call Shell("explorer.exe """ & strURL & """", vbNormalFocus)

  'これが、うまく Webクエリーで応用できたらいいんだけど・・・

End Sub

http://www.ken3.org/vba/backno/vba162.html を 少し修正


うまいこと、Webクエリーのパラメーターとして、渡せるといいなぁ・・と思いつつ失礼します。


mithmarcさんのコメント
ご回答ありがとうございます。JavaScriptのencodeURI関数を用いると、エンコードができるのですね。大変参考になりました。 エンコード後の文字列をそのままパラメータとして定義しているセルに入力してみたのですが、あくまでエンコード後の文字列を検索する結果が出力されてしまいました。 シート内webクエリの範囲 > ツールバーの「データ」 > 「接続」 > Webクエリのために作成した接続 > プロパティ > プロパティ内の「定義」タブ しかし以上の操作を経て確認できる、接続文字列にstrPARAを繋げるVBAが書けると、うまくいけそうな気がしております。現にWebクエリの定義で、検索文字列をパラメータの指定ではなく、津軽リンゴなどの特定の文字で指定する場合であれば、パラメータの部分はエンコード後の文字が接続文字列に定義されることを確認しております。 ※本当はセルに検索文字を入力した後、すぐにシートにクエリ結果を反映できるといった仕様が理想ですが・・VBAを介しても問題ありません。 当方、プログラミング知識がほとんどなく、この部分でもし解決法があれば、再度ご教示いただけますと幸いです。 お手数をおかけいたしますが、何とぞよろしくお願いいたします。

ken3memoさんのコメント
あまり 複雑にすると怒られそうですが、 パラメーター入力で、認識しないみたいなので、 Webクエリーをはじめに作成してから、 編集処理をマクロ記録してみます。 URLの編集場所、記録されたコードを探し、アレンジしてみました。 >|vb| Option Explicit 'VBA から javaScriptのencodeURIを使うテスト ' 先に http://news.mynavi.jp/articles/2012/03/25/vba/index.html を見てください。 'エンコード元の文字列を受け取り、javaScriptのencodeURIで変換して返す Function JavaScript_encodeURI(strMOJI As String) As String '検索文字をJavaScriptのencodeURI関数で作る Dim strPARA As String 'パラメーター Dim sc As Object Set sc = CreateObject("ScriptControl") sc.Language = "Jscript" 'JavaScriptを指定(書き間違えないでね) strPARA = sc.CodeObject.encodeURI(strMOJI) 'encodeURI関数を呼ぶ Set sc = Nothing Debug.Print strPARA JavaScript_encodeURI = strPARA '変換結果を返す End Function Sub A1クエリーの更新() 'A1から検索文字を受け取る Dim strWORD As String strWORD = Range("A1") 'A1を変換したいので。 '変換処理を呼ぶ Dim strPARA As String strPARA = JavaScript_encodeURI(strWORD) 'キーワードを渡し結果を受け取る '記録したクエリー更新にする Range("A5").Select 'クエリーの頭を選択して、、URLを変え更新。芸がないけど・・ With Selection.QueryTable .Connection = "URL;http://search.yahoo.co.jp/search/?p=" & strPARA .Refresh BackgroundQuery:=False '↑でセット後 更新する End With 'これが、うまく Webクエリーで応用できたらいいんだけど・・・ 'んっ?、もう一つの Google検索と連動しないと、面白くないのかなぁ・・・ End Sub ||< http://www.youtube.com/watch?v=M6zRbnXfEc0 [http://www.youtube.com/watch?v=M6zRbnXfEc0:movie:w560] ↑最後、保存キャンセルで失敗して録画が止まってしまいました・・・参考程度に見てください。 <hr> <font size=+2 color="red">こんなに複雑にしないでも、 Webクエリーで可能な操作方法があるかもしれないので、 他の回答を待ってみてください。</font> マクロ記録で作成したコードが何かの参考となれば、幸いです。

ken3memoさんのコメント
テストで作ったファイルです http://d.hatena.ne.jp/ken3memo/files/Book0405.zip ↑名前を付けて保存後、ファイルをテストしてみてください。

2 ● ken3memo
●250ポイント ベストアンサー

ごめんなさい、複雑なVBAの方へ脱線させてしまって、

文字が化けるので、文字コードから攻めた方が良かったみたいです。

Yahoo!デベロッパーネットワーク - Yahoo!検索(ウェブ検索)の検索パラメータ仕様

を参考に(他のオプションもみてください。)

だまされたと思って、
http://search.yahoo.co.jp/search?ei=Shift_JIS&p=津軽リンゴ
↑を実行してみてください。
原因が
http://search.yahoo.co.jp/search?p=津軽リンゴ
だと、文字化けなので、
文字を指定した、
ei=Shift_JIS の オプションを付けると、大丈夫な感じです。

テスト
http://search.yahoo.co.jp/search?ei=Shift_JIS&p=魚沼こしひかり
http://search.yahoo.co.jp/search?ei=Shift_JIS&p=プログラミング
http://search.yahoo.co.jp/search?ei=Shift_JIS&p=横浜

なので、
webクエリーを作成するときに
ei=Shift_JIS 付きで作成してみてください。
VBAは忘れてください・・・(ぉぃぉぃ)


ken3memoさんのコメント
あれ...直接URLに貼るとうまく行く?、リンクにするとダメなのかなぁ。 得意げに回答作りましたが、テストしないとダメですね。。。う?ん。。

mithmarcさんのコメント
ご返答遅くなり大変申し訳ございません!ご指示の通り、WebクエリのURLのパラメータの前にei=Shift_JISを挿入して実行したところ・・・なんと、うまくいきました!!!! まさにこれが実現したかったことです。こんなシンプルな方法をご教示頂き..本当にありがとうございました!また VBAにつきましても懇切にお教え頂きこちらもありがとうございました。文字の装飾等も要所要所気を遣って頂きとても分り易かったです。深く御礼申し上げます。
関連質問

●質問をもっと探す●



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