ジメジメする梅雨のお悩み、一挙解決! >>

こんにちは。

たびたびお世話になってます。
今、VBAでYahooファイナンスのサイトからWebクエリでシートに株価データを落として
手元にある、株価の入ったcsvファイルを更新する(新しいデータがあれば更新)マクロを
書いてるんですが、マクロ実行当初はまぁまぁの速さなのですが、株価データは大量に
あるため、3000銘柄くらいダウンロードすると、段々と速度が落ちてしまいます。

速度が落ちない良い方法はないでしょうか。
csvはエクセルでオープンしてます。Open文でcsvをテキストとして開いた方が
良いんでしょうか。。とりあえず、Webクエリの部分だけですが、ご教示お願いします。


Sub WebStockGet(ByVal httpUrl As String, ByRef testWs As Worksheet)

With testWs.QueryTables.Add(Connection:=httpUrl, Destination:=testWs.Range("A1"))
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With

End Sub

--
エクセル2003

このQ&Aに関連する最新のQ&A

A 回答 (1件)

このマクロはマクロの記録で[WEBクエリー]の動作を記録した物かと思いますが、基本的には余分なプオプション設定は必要ありません



参考URL
http://www.d3.dion.ne.jp/~jkondou/excelvba/T1.htm

不必要なオプションは全てカットするとすっきりします。

すっきりした所で本題に入りますが

読み込むテーブルのURL情報が
Connection:=httpUrl
となっているが実際に動作する場合は何処のデーターを読み込んでいますか?

オプションの中身を見ると読み込みするテーブルの選択が無いので
.WebTables =
WEBページ全体を一つのテーブルとして読み込んでいるようですが、不必要なデーターが一緒に付いてきていませんか?
Yahooファイナンスの株価データと言うと
http://stocks.finance.yahoo.co.jp/stocks/detail/ …
このページか
http://stocks.finance.yahoo.co.jp/stocks/history …
このページだと思いますが(共にYahooの株価)

ページ全体を一つのテーブルとして読み込み必要な情報だけ抜き出して整理する手法だと、クエリーのマクロ云々ではなくその後の処理内容の方を重視しないと実行速度の解決にはなりません

Yahooファイナンスでの株価情報は
http://table.yahoo.co.jp/t?s=4689.T&g=d
こちらのページからだと、必要な情報の日付を指定して株価データーを呼び出せます
URL指定をこんな形式にすると
http://table.yahoo.co.jp/t?c=2011&a=4&b=13&f=201 …
2011/4/13のデーターのみ取得することも可能で.WebTables =のオプションで必要なテーブルだけの抜き出しも可能です、その他のオプションの設定によっては過去のデーターに追加する形で付け加えることが可能なので、読み込み後のデーターの整理処理が必要なくなり、全体的な速度向上に繋がると思います。

必要とするのが終値でなく、リアルタイムの価格データーであれば
http://d.hatena.ne.jp/ken3memo/20090820/1250755545
こちらが参考になると思います
YouTubeでの詳しい解説もあるのでわかり易いと思います
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel VBA 【QueryTables.Add】について

おしえてください。

マクロの自動記録で、外部からのデータ取り込みをしましたら
以下の様になりました。

With ActiveSheet.QueryTables.Add(Connection:= _
"○○;■■;●●;;□□;▲▲", Destination:=Range("A1"))
.CommandText = Array("SELECT * FROM △△.▽▽")
.Name = "☆☆ からのクエリ"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With

このコードについて勉強したくてヘルプやネットで調べましたが
どうしても「.Name …」以降の説明がみつかりません;
詳しく説明の載っているサイトもしくは本などご存じでしたら
教えていただけないでしょうか。

よろしくお願い致します。

おしえてください。

マクロの自動記録で、外部からのデータ取り込みをしましたら
以下の様になりました。

With ActiveSheet.QueryTables.Add(Connection:= _
"○○;■■;●●;;□□;▲▲", Destination:=Range("A1"))
.CommandText = Array("SELECT * FROM △△.▽▽")
.Name = "☆☆ からのクエリ"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
...続きを読む

Aベストアンサー

参考にしてください。

FieldNames = True           データの列見出し:True→表示、False→非表示
RowNumbers = False          True→行番号の指定追加?
FillAdjacentFormulas = False     True →クエリーテーブルの更新時、数式を自動更新
PreserveFormatting = True       True→ページフィルド項目の移動等でピポットテーブルの書式維持
RefreshOnFileOpen = False       True→ブックを開くたびにクエリーテーブル自動更新
BackgroundQuery = True        True→クエリーテーブルをバックグランド(非同期)で実行
RefreshStyle = xlInsertDeleteCells  xlInsertDeleteCells→ワークシートに新しい行を追加できる
SavePassword = False         True→パスワードを保存する
SaveData = True            True→クエリーテーブルのデータをブックと一緒に保存
AdjustColumnWidth = True       True→列幅のアジャストを行なう
RefreshPeriod = 0           アプリケーション情報更新間隔(0は自動タイマ更新が無効)
WebSelectionType = xlAllTables    xlEntirePage→ページ全体、xlAllTables→Webの表のみ、
WebFormatting = xlWebFormattingNone  保存するWebページ形式: xlWebFormattingNone→指定なし
                    xlWebFormattingRTF→リッチテキスト、xlWebFormattingAll→HTML
WebPreFormattedTextToColumns = True  Web ページの HTML<PRE>タグ内にあるデータを列に区切る
WebConsecutiveDelimitersAsOne = True Web ページの HTML<PRE> タグ内のデータが複数の列指定関連
WebSingleBlockTextImport = False   Web ページの特定のテーブルのみをインポートするかを示す値を設定
WebDisableDateRecognition = False   False の場合、日付認識を有効にします
Refresh BackgroundQuery:=False    True→クエリーテーブル更新をバックグランド(非同期)で実行

参考にしてください。

FieldNames = True           データの列見出し:True→表示、False→非表示
RowNumbers = False          True→行番号の指定追加?
FillAdjacentFormulas = False     True →クエリーテーブルの更新時、数式を自動更新
PreserveFormatting = True       True→ページフィルド項目の移動等でピポットテーブルの書式維持
RefreshOnFileOpen = False       True→ブックを開くたびにクエリーテーブル自動更新
BackgroundQuery = True       ...続きを読む


人気Q&Aランキング

おすすめ情報