VBA性能向上委員会

VBAプログラミングの実行速度に関して、より速い性能を求めて徹底検証をします。


HOME > VBA性能徹底検証 > 画面の更新を停止するのは基本中の基本

画面の更新を停止するのは基本中の基本

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

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

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.4490.819
1回目1.3900.813
2回目1.4690.828
3回目1.3910.828
4回目1.4070.828
5回目1.5000.828
6回目1.4850.828
7回目1.4060.734
8回目1.4690.843
9回目1.4690.828
10回目1.5000.828

※単位はすべて『秒』

約56パーセント性能向上する結果となりました。



解説

今回は簡単な処理でしたが、行を増やしたりシートを作成したりブックを作成したりと見た目が変わる処理をすればするほど ScreenUpdating は効果を発揮します。

VBAの基本中の基本ですので、ぜひ覚えてください。


ただし、この ScreenUpdating はなんでも書けばよいというものではありません。

次の記事では初心者にありがちなミスをしたことで逆に遅くなってしまった例を紹介します。

ぜひ参考にしてください。

画面の更新を停止(初心者が陥りやすいミス)へ