前回のExcelでYAHOOの株価など、Webページを読み込む方法:その1 ショートカット編で書いたとおり、今回は、WebページをExcelで読み込んで、そのデータを利用しよう!のマクロ編です。
といっても、すっごく、かんたんなのだ。
Workbooks.Open Filename:=開こうとするURL名
で、Excel上で、そのサイトをExcelのシートとして扱える
(昨日の、ショートカット編とおんなじようになる)
たとえば、昨日と同じ例、YAHOOファイナンスで、エイベックスの株価の場合
(エイベックスの銘柄コードは7860なので)
URLはhttp://quote.yahoo.co.jp/q?s=7860&d=v1&k=c3&h=on&z=m
したがって、ホームページは
Workbooks.Open Filename:= _
"http://quote.yahoo.co.jp/q?s=7860&d=v1&k=c3&h=on&z=m"
とかくと、開くことができる。
ということで、これを使った例を一つ。
■仕様
以下のように、Excelのシートが出来ていて
(ただし、はじめは、株価は入っていない。証券(銘柄)コードははいっている)
「開始!」ボタンを押すと、A列の4行目から、A列に証券コードが入っている間、
YAHOOの株価欄を検索し、株価を同じ行のB列に入れていく。
(結果が上記の画像)
ただし、
・「開始!」ボタンは、ボタン1で登録されていて、
ボタンを押すと「ボタン1_Click()」を実行するものとする
・YAHOO株価欄のURLは、
"http://quote.yahoo.co.jp/q?s=" & cd & "&d=v1&k=c3&h=on&z=m"
cdのところに、証券コードが入る。
(cdの両隣の&は、VBAにおける文字列連結の意味)
・上記のURLで、セルE37が、とりあえず、今のところ、株価である
(つまり、はじめ、ショートカット編の方法で読んでみて、たしかめたところ
E37が、そうだった)
■ プログラム
ボタンをクリックすると実行される「ボタン1_Click()」の内容は、こんなかんじ
Sub ボタン1_Click() Dim url As String Dim cd As String Dim sosa_sh As Worksheet Set sosa_sh = ActiveSheet ' 現在の操作画面のシートを取っておく gyo = 4 ' 4行目から開始 Do While sosa_sh.Cells(gyo, 1) <> "" ' コード取得してURL設定 cd = sosa_sh.Cells(gyo, 1) url = "http://quote.yahoo.co.jp/q?s=" & cd & "&d=v1&k=c3&h=on&z=m" ' 読み込み開始=>この時点で、アクティブシートは、これになる Workbooks.Open Filename:=url ' 値を設定 sosa_sh.Cells(gyo, 2) = ActiveSheet.Range("E37") ' E37が株価 ' 読み込んだページをクローズ ActiveWorkbook.Close ' 次の行へ gyo = gyo + 1 Loop End Sub |
(上記< > ¥ は、本当は半角です)
ってなことで、Webページを読み込む場合は、AJAXより、Excelのほうが、ずっと簡単だったりする。
なお、YAHOOは将来、URLやセルを変えるかもしれない。
(つーか、この実験をやったのは昨日なので、今日は、もう違う可能性すらある)
そのため読み込みURLやセルは、別途シート上に定義しておき、それを
参照する形のほうが、安全かも。。