1333545025 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は表示されているような文字化けがおこります。

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

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

ベストアンサー

id:ken3memo No.2

回答回数317ベストアンサー獲得回数115

ポイント250pt

ごめんなさい、複雑な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は忘れてください・・・(ぉぃぉぃ)

id:ken3memo

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

2012/04/06 07:03:51
id:mithmarc

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

2012/04/12 22:49:52

その他の回答1件)

id:ken3memo No.1

回答回数317ベストアンサー獲得回数115

ポイント250pt

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クエリーのパラメーターとして、渡せるといいなぁ・・と思いつつ失礼します。

他1件のコメントを見る
id:ken3memo

あまり 複雑にすると怒られそうですが、
パラメーター入力で、認識しないみたいなので、

Webクエリーをはじめに作成してから、
編集処理をマクロ記録してみます。
URLの編集場所、記録されたコードを探し、アレンジしてみました。

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
D
↑最後、保存キャンセルで失敗して録画が止まってしまいました・・・参考程度に見てください。




こんなに複雑にしないでも、
Webクエリーで可能な操作方法があるかもしれないので、
他の回答を待ってみてください。


マクロ記録で作成したコードが何かの参考となれば、幸いです。

2012/04/05 19:52:50
id:ken3memo

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

2012/04/05 20:03:48
id:ken3memo No.2

回答回数317ベストアンサー獲得回数115ここでベストアンサー

ポイント250pt

ごめんなさい、複雑な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は忘れてください・・・(ぉぃぉぃ)

id:ken3memo

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

2012/04/06 07:03:51
id:mithmarc

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

2012/04/12 22:49:52

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

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

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

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

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