画面の更新を停止するのは基本中の基本
VBAマクロの性能を向上させるためのまず第一歩が、
『画面の更新を停止すること』です。
マクロの記録から脱却して、VBAプログラマになるための第一歩ともいえるでしょう。
なぜなら、マクロの記録だけでは知ることができない技術だからです。
ScreenUpdationg検証サンプルソース
Sub Sample()
Application.ScreenUpdating = False ' 画面の更新を停止
End Sub
ScreenUpdatingをFalseにすることで、どの程度性能が向上するか、
次の2パターンで検証してみました。
ScreenUpdating検証サンプルソース1
Sub Test1()
Dim x As Long
Dim y As Long
Dim y As Long
For y = 1 To 99 Step 1
For x = 1 To 99 Step 1
ActiveSheet.Cells(y, x).Value = y * x
Next x
Next y
End Sub
ScreenUpdating検証サンプルソース2
Sub Test2()
Dim x As Long
Dim y As Long
Dim y As Long
Application.ScreenUpdating = False ' 画面の更新を停止
For y = 1 To 99 Step 1
For x = 1 To 99 Step 1
ActiveSheet.Cells(y, x).Value = y * x
Next x
Next y
End Sub
アクティブなシートに対し、99×99の表を作成するという2次元の単純なロジックです。
それに対し、実行結果が次のとおりです。
検証
回数 | Test1 秒数 | Test2 秒数 |
---|---|---|
平均 | 1.449 | 0.819 |
1回目 | 1.390 | 0.813 |
2回目 | 1.469 | 0.828 |
3回目 | 1.391 | 0.828 |
4回目 | 1.407 | 0.828 |
5回目 | 1.500 | 0.828 |
6回目 | 1.485 | 0.828 |
7回目 | 1.406 | 0.734 |
8回目 | 1.469 | 0.843 |
9回目 | 1.469 | 0.828 |
10回目 | 1.500 | 0.828 |
※単位はすべて『秒』
約56パーセント性能向上する結果となりました。
解説
今回は簡単な処理でしたが、行を増やしたりシートを作成したりブックを作成したりと見た目が変わる処理をすればするほど ScreenUpdating は効果を発揮します。
VBAの基本中の基本ですので、ぜひ覚えてください。
ただし、この ScreenUpdating はなんでも書けばよいというものではありません。
次の記事では初心者にありがちなミスをしたことで逆に遅くなってしまった例を紹介します。
ぜひ参考にしてください。