アプリ版:「スタンプのみでお礼する」機能のリリースについて

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"




このような感じで銘柄の番号のみが違うコードが続きます。

A 回答 (2件)

余計なお世話かもしれませんが



毎日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内に追加すると読み込んだデータを上書きするので、既存の表に行を一行挿入してマクロ実行すると、最新の日付データを積み重ねて追加していく事もできます。

毎回表をすべてを読み込んで、加工しているのであれば読み出し方法を工夫すると処理が速くなる可能性はあります。
    • good
    • 0
この回答へのお礼

>web2525様
50日分のデータ以外にも指定して取出しできるのですね。他の技も勉強になります。明日にでも本屋に行って基礎レベルをあげようと思いました。

ありがとうございます。

お礼日時:2009/03/08 03:56

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に入力しておいて、そのセルを読んでサブルーチンを呼び出すループを書いとけば良いかと。
    • good
    • 0
この回答へのお礼

>osamuy様
回答ありがとうございます。
かなりの初心者なので、サブルーチンの意味が・・。教えていただいたコードとともに、「できる大辞典 EXCEL VBA」で早速調べたいと思います。サブルーチン便利そうです。
感謝です。

お礼日時:2009/03/07 20:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!