[[20031026181922]] 『for...nextの処理がだんだん遅くなる』(moonmika) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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)


CPUは2.1Gなので問題ないかと・・・^^;
以前、変数を使うとCPUにそれを覚えていて、それが原因で
遅くなるって話を聞いたのですが、、
何が変数なのかも分からないので^^;
  (moonmika)


 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.