こういうことをしてみたいケースがあった。シート上に商品一覧みたいなリストがあったとして:
右クリックで「○○のページで表示」みたいなメニューが出てくるっていう
(もちろん実際にはYahoo!ショッピングじゃないですけどね):
単なる検索ならURLを生成してHyperlinkで開けばできそうだった。
右クリックで「○○のページで表示」みたいなメニューが出てくるっていう
(もちろん実際にはYahoo!ショッピングじゃないですけどね):
単なる検索ならURLを生成してHyperlinkで開けばできそうだった。
しかし実際にやりたかったのは検索ではなく、あるサイトでJANコードを使って
特定の商品のページを一発で表示させることだった。
ところがそのサイトでは独自の商品コードで管理していて、それができなかった。
URLにはその独自のコードが入ってなければならない。でもそんなコードはわからない。
特定の商品のページを一発で表示させることだった。
ところがそのサイトでは独自の商品コードで管理していて、それができなかった。
URLにはその独自のコードが入ってなければならない。でもそんなコードはわからない。
ただしトップページの検索ボックスにJANコードを入れて検索させれば、
その商品のページが一発で表示されることがわかった。
そこでおかしなことを思いついた。
上の右クリックメニューを実行するとIEでそのトップページを開き、
自動的にセルの値を検索ボックスに入力・検索するという仕掛け。
その商品のページが一発で表示されることがわかった。
そこでおかしなことを思いついた。
上の右クリックメニューを実行するとIEでそのトップページを開き、
自動的にセルの値を検索ボックスに入力・検索するという仕掛け。
なんかバカっぽいwww
でも「フォームに自動入力・送信」ってことでは他のケースでも使えるかも。
そこで実験がてら、やってみることにした。
でも「フォームに自動入力・送信」ってことでは他のケースでも使えるかも。
そこで実験がてら、やってみることにした。
で、そんなことExcelでできるの?って、いろいろ調べたらできた。
「Microsoft HTML Object Library」ってやつを使う。
ただ、まとまったマニュアルらしきものやオブジェクトの一覧が見つからなかったので
手探りでいじるしかなかったんだけど。
・・・ってことはExcelの機能でもなんでもなくて、Wordでやっても何でやってもいいわけだがw
でもExcelだったら、リストから複数の項目へ連続入力なんてこともできそうだ。
ただし、以下はIE7やVistaでは通用しないらしい。画面はExcel2003とIE6です。
右クリックメニューで呼び出すプロシージャをこんなふうにしてみた:
それはそのページをあらかじめ調べてみるしかない。
メモ帳でHTMLソースが開くので、それらしきところを探してみる。CSSとかわかんないけど。
二つめのformのタグが「<form action="/search" method="get">」とか書いてあるから、
たぶんこれだろうと。二つめだからforms(1)。
で、そのタグの中に「<input name="p" class="dvTxt" type="text" value="">」
とかあるのがそれっぽいなあと。だから"p"。
「Microsoft HTML Object Library」ってやつを使う。
ただ、まとまったマニュアルらしきものやオブジェクトの一覧が見つからなかったので
手探りでいじるしかなかったんだけど。
・・・ってことはExcelの機能でもなんでもなくて、Wordでやっても何でやってもいいわけだがw
でもExcelだったら、リストから複数の項目へ連続入力なんてこともできそうだ。
ただし、以下はIE7やVistaでは通用しないらしい。画面はExcel2003とIE6です。
右クリックメニューで呼び出すプロシージャをこんなふうにしてみた:
Public Sub Auto_Search() Dim objIE As Object '見ての通りIEのオブジェクト Dim sKeyWord As String '見ての通り検索ワード Dim sngTemp As Single 'ページを開けなかった場合にタイムアウトと判定させるのに使用 Const URL = "http://shopping.yahoo.co.jp/" Const TIME_OUT = 15 'タイムアウトとして設定する時間(秒数) On Error GoTo Proc_Err sKeyWord = ActiveCell Set objIE = CreateObject("InternetExplorer.application") 'IEが開く With objIE .Visible = True 'IE可視化 .navigate URL '指定のURLを開く sngTemp = Timer Do While .Busy = True '接続中は「Busy = True」らしい。 DoEvents '時間内に接続できなかったら終了 If Timer - sngTemp > TIME_OUT Then GoTo IE_TimeOut Loop sngTemp = Timer Do While .readyState <> 4 '「ReadyState」はページのDL状態を示すらしい。4で完了。 DoEvents '時間内にDLできなかったら終了 If Timer - sngTemp > TIME_OUT Then GoTo IE_TimeOut Loop .document.forms(1).Item("p").Value = sKeyWord '検索ボックスに入力 .document.forms(1).submit '送信=検索の実行 End With Exit_Proc: Set objIE = Nothing 'いちおう Exit Sub IE_TimeOut: MsgBox "タイムアウトです", vbInformation Resume Exit_Proc Proc_Err: MsgBox "エラー:" & Err.Number & vbCrLf & Err.Description, vbExclamation Resume Exit_Proc End Subなんで検索ボックスがforms(1)の"p"ってわかるのか?って、
それはそのページをあらかじめ調べてみるしかない。
メモ帳でHTMLソースが開くので、それらしきところを探してみる。CSSとかわかんないけど。
二つめのformのタグが「<form action="/search" method="get">」とか書いてあるから、
たぶんこれだろうと。二つめだからforms(1)。
で、そのタグの中に「<input name="p" class="dvTxt" type="text" value="">」
とかあるのがそれっぽいなあと。だから"p"。
Wordで開いて調べることもできる。
まあ実際には何度か実験して確認したんですけどね。
まあ実際には何度か実験して確認したんですけどね。
で、実行してみると一応動いた。
変なもんに入力・送信してもマズイので、とりあえず検索で実験してみたけど、
なんか使えそうなので覚えておくことにする。
変なもんに入力・送信してもマズイので、とりあえず検索で実験してみたけど、
なんか使えそうなので覚えておくことにする。
っても、いずれIE7にするだろうし、また調べ直さなきゃいけないですけどね。