2016-07-04 8 views
0

数千の行のデータを調べ、いくつかのフィールドの値に基づいて特定の行を編集する必要があります(条件を満たす場合)。Excel VBAループの効率の問題

問題は、(1ループあたり13秒、時には100ループを持つ)時間がかかることです... VBAをフィルタリングしてテーブルをフィルタリングし、フィルタリングされた行を処理しようとしましたが、同じ時間がかかりました。

While l < CurrAloc And k <= lastrow 
    If Cells(k, g) = "Pass" And Cells(k, h) <> "" And Cells(k, i) = "" And Cells(k, j) = "Available" Then 

    Cells(k, ULDecCol) = CurrCustomer 
    Cells(k, ULFromClassifierCol) = CurrClassifier 
    add_to_log k 
    Sheets("Unit List").Select 
    l = l + 1 
    End If 

    k = k + 1 
Wend 
+1

あなたのコード全体ですか?あなたはあなたの言うように何千もの行をスキャンしているあなたのループの中で 'Sheets(" Unit List ")を選択します。このSelectを使って何をしているのか分かりません。 「選択」には多くの時間がかかります。 –

+0

〜13秒が多いです。あなたはそのような単一のループでパフォーマンスの問題に直面してはいけません。おそらくあなたの 'add_to_log'に問題がありますか?あなたがそのログを書いていけないなら、どれくらい時間がかかりますか?あなたがログインしているときに別のシートを選択するを使用する場合:選択せずにそのシートに書き込もうとします。 – Jochen

答えて

1

whileループの終了後

Application.Calculation = xlCalculationAutomatic

続いwhileループ前

Application.Calculation = xlCalculationManual

を試してみてください。

+0

それはとても基本的です私は正直少し恥ずかしいです:)ありがとう! –