2016-05-03 25 views
2

私は列Aの日付が今日よりも小さいかどうかを確認するマクロを作成したいと思います。 ので、マクロは、列に「完了」を挿入する必要がある場合G.Excelマクロ - 非常に遅い

Sub DoneCheck() 

Dim rngZelle As Range, strText As String 
With ActiveSheet 

For Each c In Sheets("3. Umlagerungen").Range("A:A") 
If c.Value < Int(Now) And Not (IsEmpty(c.Value)) Then c.Offset(0, 6).Value = "done" 

Next c 
End Sub 

それが本当に実行されるため、私は助けを探していますなぜ 理由がある...私はそれが非常に悪いコーディングされていることを知っているが、それは動作します遅いです...

Application.ScreenUpdatingで試しましたが、何も変わりません。

はあなたが唯一の列Aで使用した細胞をチェックして、常にApplication.ScreenUpdating = Falseを追加するとスピード物事を助けなければならない事前に&挨拶

+0

チェック[いくつかの最適化のヒントについては、このスレッド]( http://stackoverflow.com/questions/20738373/can-i-make-this-macro-more-efficient-or-faster/20754562#20754562)、そのようなスレッドがさらに存在する可能性があります。それらをチェックして実装しましたか? – Spidey

答えて

3

ありがとう:

Sub DoneCheck() 
Dim eRow as long 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

eRow = Thisworkbook.Sheets("3. Umlagerungen").Cells(Rows.Count,1).End(xlUp).Row 

For Each c In Thisworkbook.Sheets("3. Umlagerungen").Range("A2:A" & eRow) 
    If c.Value < Int(Now) And Not (IsEmpty(c.Value)) Then c.Offset(0, 6).Value = "done" 
Next c 

Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 

End Sub 
+0

少し速くなったようですが、それでもまだ非常に遅いです。 その背後にあるデータの量は、特に大きいわけではありません。 – Bluesector

+0

シートに計算がありますか?マクロが実行されている間にそれらをオフにするのに役立ち、ループが終了したときにそれらを自動的に自動に戻すことができます。最初の 'Application.Calculation = xlCalculationManual'と最後の' Application.Calculation = xlCalculationAutomatic' – Jordan

+0

** **それはありがとうございます! – Bluesector