2016-11-10 4 views
0

列を削除するコードの速度に問題があります。以下のコードは実行に5秒かかります。実行する前に文書を保存すると1秒かかるだけです。節約はそれほど素晴らしいものではありませんが、私はまともなコンピュータを持っていて、このシートを実行する人は基本的にシンクライアントであり、実行するコードはずっとあります。また、ワークブックが完成したら、テンプレートとして使用して保存することができず、完了したら新しいワークブックとして保存されます。データのある行の数は〜49,000です。これを最初にClearContentsなしで試しました。Excel VBAが最初に保存されない限り、列の削除が遅くなる

文書を先に保存しなくてもこれを高速化する方法はありますか?

Sub GenerateOperations() 

With Application 
    .ScreenUpdating = False 
    .DisplayAlerts = False 
    .EnableEvents = False 
    .CutCopyMode = False 
End With 

Dim OpSheet As Worksheet 

Set OpSheet = Sheet3 

Application.Calculation = xlCalculationManual 
OpSheet.Range("A:C,E:G,L:Q").ClearContents 
OpSheet.Range("A:C,E:G,L:Q").Delete xlShiftToLeft 
Application.Calculation = xlCalculationAutomatic 

With Application 
    .ScreenUpdating = True 
    .DisplayAlerts = True 
    .EnableEvents = True 
End With 

End Sub 

答えて

0

私は、最後の行を見つけ、コードがほぼ即座に実行される列のその部分だけを削除することで、作業コードが以下のようになることを発見しました。

Sub GenerateOperations() 

With Application 
    .ScreenUpdating = False 
    .DisplayAlerts = False 
    .EnableEvents = False 
    .CutCopyMode = False 
End With 

Dim OpSheet As Worksheet 

Set OpSheet = Sheet3 

With OpSheet 
    LastRow = .UsedRange.Rows.Count 
    .Range("A1:C" & LastRow & ",E1:G" & LastRow & ",L1:Q" & LastRow).Delete xlShiftToLeft 
End With 

With Application 
    .ScreenUpdating = True 
    .DisplayAlerts = True 
    .EnableEvents = True 
End With 

End Sub 
0

このビットなしで試しましたか?.ScreenUpdating = True

+0

なぜ彼はそれをオフにしますか?パフォーマンスを向上させるために画面の更新をオフに切り替えることを強くお勧めします。 –

+0

これは高速化しません – Rdster

+0

はいオフにするとスピードアップします。私の経験でそれをオンに戻すことは不要で、直後に別のサブが呼び出されるとコードが遅くなる可能性があります。 – Nick

関連する問題