2017-08-31 3 views
1

私のVBAコードではsumifs関数を使用していますが、速度が遅いことに気付きました。毎週10k-20kレコードがあるので、分がかかります。sumif関数vba高速

ここでは、sumif関数を反映するコード部分を示します。コードは機能しますが、より速く実行できる方法を探しています。

For i = 2 To LR10 
MOB_T.Cells(i, 13).Value = Application.WorksheetFunction.SumIfs(Rng370, Rng380, MOB_T.Cells(i, 12).Value, Rng390, Selection.Cells(6, 2).Value) 
Next i 
+4

コードより速い質問を実行し、入力 –

+0

おかげでありがとうhttps://codereview.stackexchange.com/に属しているが、列Mが列Lの値、MOB_T.Cells(i、12)に依存する場合、どのように変更できますか.Value範囲とR1C1の両方を使用しようとしましたが、 – sc1324

答えて

2

ルーピングを回避します。遅い部分は、VBAとスプレッドシートの間でデータを転送しています。 の式を対象範囲全体に一度に入力し、必要に応じて静的な値に変換します。ような何か:

range("M2:M" & LR10).Formula = "=SUMIFS(some params here)" 

はまた、あなたの式がはるかに簡単で読みやすくする可能性がありますFormulaR1C1の使用を検討できます。

静的な値に変換するには - 必要な場合 - ちょうど使用:

With range("M2:M" & LR10) 
    .value = .value 
End With 
+0

ため – sc1324

0

あなたはあなたのコードを実行する前に、手動に計算を設定してみてください。

Application.Calculation = xlCalculationManual 

ループが実行されるとその後、再び電源をオンにします:

Calculate 
Application.Calculation = xlAutomatic 
+0

ありがとう、私もApplication.ScreenUpdating = Falseにしようとしましたが、実際に実行時間を短縮しませんでした。 – sc1324

関連する問題