[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『for...nextの処理がだんだん遅くなる』(moonmika)
教えてください^^;
この件何度も質問してて、新たに問題発生してくるんです〜
Sheets("sc").にあるデータを順に3000回、webデータをDLしてるのですが・・・
20〜30回くらいなら、問題ないのですが、500,1000となると
極端に遅くなります、
1回あたり2〜3秒の処理なのですが、
2秒X500=1000秒とはなりません、なにが悪いのでしょう??
For i = 11 To 3000
Sheets("sc").Select
Cells(1, 1) = Cells(i, 1)
abc= Cells(i, 1) If Cells(i, 1) = 0 Then GoTo line1 End If
Application.ScreenUpdating = False
Sheets("インポートシート").Select
Cells.Select Range("H12").Activate Selection.ClearContents
With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://chart.yahoo.co.jp/t?c=2000&a=1&b=1&f=2010&d=10&e=26&g=d&s=" & abc & ".t&y=0&z=" & abc & ".t" _ , Destination:=Range("A1")) .Name = "t?&s=" & gya & "&a=1&b=1&c=2000&d=1&e=1&f=2010&g=d&y=0&z=" & gya & "&x=" .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 .Refresh BackgroundQuery:=False End With
'その他の処理
next
コードの事はよく解りませんが これと似たような事(DL)、以前私もやった事があるんですが 処理コードの問題では無く、マシンスペックの関係も考えられるのではないでしょうか。 現実に 20〜30回では問題なく動いているのですから。
moonmikaさんのコードは、私も参考にさせてもらってます。勿論原作者さんにも感謝しています。 全く場違いなコメントなら申し訳ありません。 (jun53)
私が経験した処理の遅い事例では、WorkSheetChange()などとの混在です。 上のコード以外にシートの変化を見張っているVBAがありませんか? (kazu)
WorkSheetChange()などとの混在です。 結構あります、その他の処理の中に1箇所
next iの後の最後の処理に2個所です。
(moonmika)
あら、自分の貧弱 PC と一緒にしちゃいました。 やはり VBA が原因でしたか。ごめんなさいです。
[[20030713123814]]『ハイパーリンクについて』(moonmika)
[[20031004183157]] 『webクエリの巡回』(moonmika)
わたしは上記ログも参考にしました。 管理人さん修正作業用ログ発掘隊 (jun53)
WorkSheetChange()などと一緒に使うと、 処理のたびにそのChanged VBAなどが起動され、めちゃ遅くなります。
一度、Changed VBAの処理をコメントにして試してみてください。
対策はマクロの方が動いているときにswをOFFにしてChangedの処理をバイパスすれば 可能です。 (kazu)
To 3000 これ、概ね全銘柄でしょうから大変ですね。 終値だけでしたら下記URL で一気に。 表計算用に作られてるようですし、過去約一ヶ月くらい迄いけるようです。 検索で見つけただけで、データの正確性は解りません。 既にご存じならごめんなさい。 (jun53) http://kabsknet.hp.infoseek.co.jp/ タブ区切りのようです。
>一度、Changed VBAの処理をコメントにして試してみてください。 コメントって、’をいれるんですか?
> 対策はマクロの方が動いているときにswをOFFにしてChangedの処理をバイパス > すれば可能です。
ううう〜〜〜、まったくわかりません^^;
jun53さんHPみました。
今後参考になるかどうか、詳しくみてみます。
(moonmika)
意地が悪かったようですが、私が考えていたとおりに回答してくれましたね。
コメントにするのはシングルクオーテーション[']をつけます。
swでバイパスする件ですが、下のような感じでいけると思います。
(1)Public macsw As Integerは標準モジュールの最初のプロシジャの上に 書いてください。
(2)マクロの先頭に macsw = 1 最後に macsw = 0 を追加します
(3)Worksheet_Change の処理の先頭に If と最後に End If を追加します。
(kazu)
' ---------- -------- 標準モジュール -------- ---------- Public macsw As Integer
Sub Macro99() macsw = 1 ' ...マクロで処理している内容... macsw = 0 End Sub
' ---------- ---------- sheetコード ---------- ---------- Private Sub Worksheet_Change(ByVal Target As Range) If macsw <> 1 Then
' ...今までWorksheet_Changeで処理していた内容...
End If End Sub
イベントを無効にするのは Application.EnableEvents = False 入れてもいいかもしれません (りな)
たしかに↑で確かめるのがよいかもしれませんね。 (kazu)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.