VBAの処理速度を向上する方法(画面表示を停止する)
Q.VBAで行ごとの繰り返し処理などを行っていると処理が遅くて待ち時間が長くなることがあります。処理を速くする方法を教えてください。
VBAで処理が遅くなる場合、画面表示に時間がかかっている場合があります。
処理の途中経過の表示が必要でない場合、VBAでは、処理中に画面の表示をストップする命令があり、これを使用すると処理が早くなる可能性があります。
例えば、新規シートにコマンドボタンを貼り付け、以下のようなVBAを記述してください。
Private Sub CommandButton1_Click()
For i = 1 To 10000
Me.Range(“A1″).Value = i
Me.Range(“A1″).Font.ColorIndex = (i Mod 12)
Next
End Sub
これを実行すると、A1セルの表示が1~10000までカラフルにカウントアップされます。
このような大量の表示処理は、途中の表示過程を停止させることで、処理時間を短くできます。これを行うVBA命令が、Application.ScreenUpdatingです。
以下のようにコードを付
け足して実行し直してください。
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False ‘←追加部分(画面表示の停止)
For i = 1 To 10000
Me.Range(“A1″).Value = i
Me.Range(“A1″).Font.ColorIndex = (i Mod 12)
Next
Application.ScreenUpdating = True ‘←追加部分(画面表示の停止解除)
End Sub
実行して頂けるとわかりますが、カウントアップの過程は見えず、最終結果の10000のみが表示されます。途中の表示にかかる処理時間が短縮されたため、処理時間が短くなったのがおわかり頂けると思います。
※最後に「Application.ScreenUpdating = True」として元の状態に戻してあげましょう。
ただし、画面表示以外で時間がかかっている場合は効果がありませんので、処理の内容を確認した上でお試しください。