ScreenUpdatingって効果あるの?
エクセルVBAで処理速度を改善したい時によく使われるのに、ScreenUpdatingというものがあります。
何をしているのかというと、画面の描写をいったんストップしたり、元に戻したりするという機能です。
具体的な使い方としては、処理最初に画面描写を止めて、処理の最後に元に戻します。
~処理~
Application.ScreenUpdating = True
処理速度改善、でもそれは昔の話では?
昔から、もう10年以上も前からこの手法は使われています。
それだけ時間が経つと、環境もずいぶん変わってますよね。
そこでいくつかの疑問がわいてきました。
- パソコンスペックが良くなってるし、もうそこまで気にする必要ないのでは?
- エクセルのバージョンも違うし、わざわざ画面描写止めなくても処理速度落ちにくいような改善されてるのでは?
要するに、盲信的に使っているけど、まだ効果あるの?という事。
実際にやってみた
考える暇があったら試してみよう!ということでやってみました。
実験内容
inシートからoutシートに、1行ずつコピー・貼り付けをする。
テストデータは500行まで用意。
コードはこんな感じ。
シンプルに、inシートのA列が空欄になるまで、ひたすらコピペするというもの。
Public Sub test1()
Dim st As Double ‘開始時間
Dim et As Double ‘おしまい時間
Dim cnt As Double ‘カウント
Application.ScreenUpdating = False
st = Timer
cnt = 1
Worksheets(“in”).Select
Do While Not Cells(cnt, 1) = “” ‘500回分あるよ
Rows(cnt).Copy ‘inシートからコピーして
Worksheets(“out”).Select ‘outシートに貼り付け
Rows(cnt).Select
ActiveSheet.Paste
Worksheets(“in”).Select ‘次の準備
cnt = cnt + 1
Loop
et = Timer
Worksheets(“test”).Select
Cells(1, 1) = et – st ‘時間計測
Application.ScreenUpdating = True
End Sub
画面描写が多い処理にしたかったので、inシートとoutシートを行ったり来たりするようにしてます。
後は赤くマーカーしているApplication.ScreenUpdatingをつけた状態と、消した状態のそれぞれで実行し、時間を計測します。
次に実験マシン環境。
- Windows10Pro
- エクセル2016
- CPU Core i5-6500
- メモリ 8G
さて結果は・・・
ScreenUpdatingは処理速度改善に効果があります!
でも画面描写が多い処理だったからでは?
そう、これだけ差が開いたのは、画面描写が多い処理にしたことが大きいです。
というわけでテストコードを少しいじってみましょう。
Public Sub test2a()
Dim st As Double
Dim et As Double
Dim cnt As Double
st = Timer
cnt = 1
Worksheets(“in”).Select
Do While Not Cells(cnt, 1) = “”
Rows(cnt).Copy Worksheets(“out”).Rows(cnt)
cnt = cnt + 1
Loop
et = Timer
Worksheets(“test”).Select
Cells(1, 4) = et – st
End Sub
行ったり来たりを無くしました。
すると結果は11秒になりました。
そしてこれにScreenUpdatingをつけると、10秒になりました。
画面描写が少ない処理でも効果はいちおうあるようです。
まとめ
- ScreenUpdatingは処理速度改善に効果がある
- 画面描写が多い処理にはとくに効果がある
- 画面描写が少ない処理にもいちおう効果はある
要するに、今でも十分効果があるということになります。
コメント