●下記のプログラムは、VBAを高速する手法の中で、プログラム作成の際に、取り入れた方が良いでしょう。実際どのように事をしているのか順番に解説します。 ① ScreenUpdating = False ‘描画停止 ② EnableEvents = False ‘イベント監視停止 ③ Calculation = xlCalculationManual ‘手動計算 ●EXCELでは、常に描画作成・イベント監視・自動計算を行っています。この機能をプログラムに記述する事で、3つの機能を一時的に止める事でき、全体的な処理スピードを高める事ができます。
Sub kosoku_Rei()
Dim I as Long
With Application '高速化はじめ
.ScreenUpdating = False '描画停止
.EnableEvents = False 'イベント監視停止
.Calculation = xlCalculationManual '手動計算
End With
'------------実行処理を行うコードを書く(高速化のコードで囲む)---------
Dim I = 1 to 100000
Cells("A",I) = I
Next I
'---------------------------------------------------------------
With Application '高速化おわり
.ScreenUpdating = True '描画再開
.EnableEvents = True 'イベント監視再開
.Calculation = xlCalculationAutomatic '自動計算
End With
End Sub
●プログラム説明 VBA高速化しない場合
下記のプログラムでは、描画作成・イベント監視・自動計算のいづれも停止せずに実行するプログラムです。
Sub hikakuTEST()
Dim I As Long
Dim TIME_S, TIME_E, TIME_G As Date
TIME_S = Now() '処理の実行前に時間を代入
For I = 1 To 1000000
Cells(I, "A") = I
Next I
TIME_E = Now() '処理の終了後に時間を代入
TIME_G = TIME_E - TIME_S '終了後-実行前=差の時間を算出
MsgBox TIME_G '差の時間を表示する(処理時間)
End Sub
Sub hikakuTEST2()
Dim I As Long
Dim TIME_S, TIME_E, TIME_G As Date
With Application '高速化はじめ
.ScreenUpdating = False '描画停止
.EnableEvents = False 'イベント監視停止
.Calculation = xlCalculationManual '手動計算
End With
TIME_S = Now() '処理の実行前に時間を代入
For I = 1 To 1000000
Cells(I, "A") = I
Next I
TIME_E = Now() '処理の終了後に時間を代入
TIME_G = TIME_E - TIME_S '終了後-実行前=差の時間を算出
With Application '高速化おわり
.ScreenUpdating = True '描画再開
.EnableEvents = True 'イベント監視再開
.Calculation = xlCalculationAutomatic '自動計算
End With
MsgBox TIME_G '差の時間を表示する(処理時間)
End Sub