- 締切済み
WEBクエリ
WEBクエリでヤフーから、時系列で株価を取得するマクロを作っています。 シートAの左に、次々と1銘柄1シートで読み込む場合、下のコードをもっと短くする方法はあるのでしょうか?コードは同じで、銘柄の番号のみ違います。よろしくお願いします。 Sheets("A").Select Sheets.Add ActiveSheet.Name = "2002" With ActiveSheet.QueryTables.Add(Connection:="URL;http://table.yahoo.co.jp/t?s=2002.T&g=d", Destination:=Range("A2")) .Refresh BackgroundQuery:=False End With Range("A1").Select ActiveCell.FormulaR1C1 = "2002" Sheets("A").Select Sheets.Add ActiveSheet.Name = "2202" With ActiveSheet.QueryTables.Add(Connection:="URL;http://table.yahoo.co.jp/t?s=2202.T&g=d", Destination:=Range("A2")) .Refresh BackgroundQuery:=False End With Range("A1").Select ActiveCell.FormulaR1C1 = "2202" Sheets("A").Select Sheets.Add ActiveSheet.Name = "3000" With ActiveSheet.QueryTables.Add(Connection:="URL;http://table.yahoo.co.jp/t?s=3000.T&g=d", Destination:=Range("A2")) .Refresh BackgroundQuery:=False End With Range("A1").Select ActiveCell.FormulaR1C1 = "3000" ・ ・ ・ このような感じで銘柄の番号のみが違うコードが続きます。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- web2525
- ベストアンサー率42% (1219/2850)
余計なお世話かもしれませんが 毎日50日分のデータが必要なんでしょうか? URLの指定を http://table.yahoo.co.jp/t?c=年&a=月&b=日&s=銘柄コード に変更すると指定した日のみのデータが取り出せます その日だけのデータ取出しであれば 銘柄コード = "2202" 年 = Year(Date) 月 = Month(Date) 日 = Day(Date) With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://table.yahoo.co.jp/t?c=" & 年 & "&a=" & 月 & "&b=" & 日 & "&s=" & 銘柄コード, Destination:=Range("A1")) .WebFormatting = xlWebFormattingNone .WebTables = "15" .Refresh BackgroundQuery:=False End With こんな感じで取得可能、ちなみに年月日を指定すると指定日以降の本日までのデータのみ取出しが可能に。 .RefreshStyle = xlOverwriteCells With内に追加すると読み込んだデータを上書きするので、既存の表に行を一行挿入してマクロ実行すると、最新の日付データを積み重ねて追加していく事もできます。 毎回表をすべてを読み込んで、加工しているのであれば読み出し方法を工夫すると処理が速くなる可能性はあります。
- osamuy
- ベストアンサー率42% (1231/2878)
public sub set_chart( sh as worksheet, sec_cd as string ) dim url_chart as string url_chart = replace("http://table.yahoo.co.jp/t?s=<CD>&g=d", "<CD>", sec_cd ) sh.Name = sec_cd With sh.QueryTables.Add(Connection:="URL;" & url_chart, Destination:=sh.Range("A2")) 以下略 みたいなサブルーチンを作って、 Call set_chart( "2002.T" ) のように呼び出す。 銘柄コードをシートAに入力しておいて、そのセルを読んでサブルーチンを呼び出すループを書いとけば良いかと。
お礼
>osamuy様 回答ありがとうございます。 かなりの初心者なので、サブルーチンの意味が・・。教えていただいたコードとともに、「できる大辞典 EXCEL VBA」で早速調べたいと思います。サブルーチン便利そうです。 感謝です。
お礼
>web2525様 50日分のデータ以外にも指定して取出しできるのですね。他の技も勉強になります。明日にでも本屋に行って基礎レベルをあげようと思いました。 ありがとうございます。