こどちゃれの紹介コードを無料でゲットする!クリック!

【ExcelVBA処理高速化】時間計測をして比較実験してみた

悩む人

エクセルVBAの処理速度を上げる方法を教えてほしい

上記のお悩みを解決します。

本記事の内容
  • たった2行追加して、エクセルVBAの処理速度を上げる方法
本記事の根拠
  • 時間計測をして、早くなっていることを確認済です
本記事を読んでほしい人
  • Excelマクロを多用している方

それでは本題に入ります。

スポンサーリンク
目次

画面更新OFF/ONのコード

結論です。

マクロの最初と最後に下記のコードを入れることで画面更新をOFF/ONすることができます。

マクロの最初

Application.ScreenUpdating = False ’画面更新OFF

マクロの最後

Application.ScreenUpdating = True ’画面更新ON

上記の2行のコードを記述するだけです。

画面更新なしの場合

画面更新ありの場合

画面更新とは

ばらもん。

マクロ実行時に画面がチカチカすることはありませんか?

この画面チカチカは、マクロで実行している作業を画面表示しているだけなんです。
マクロに精通されていない方だと、チカチカ画面を見ると『すげぇ!』ってなります。

しかし、システム管理者からすると処理時間が余分かかっている重たい処理なんです・・・。(もったいない)

そこで今回は、マクロ処理が重たくなるのを防ぐために『画面チカチカをオフにしよう』というお話です。

たった2行追加するだけなので、とても簡単かつ効果絶大です。

やらないのは損ですよぉ~。

実験・検証

Statistic WordPress Web Data  - 200degrees / Pixabay

今回の実験では、画面更新をオフにすることで約4倍も処理が早くなりました。

実験内容

新シート追加→表作成の動作を10回繰り返す。
画面更新あり・なしで、それぞれ10回の処理時間の平均値を算出する。

結果

  • 画面更新ありの平均値は『0.455078』
  • 画面更新なしの平均値は『0.113672
ばらもん。

画面更新なしは、画面更新ありと比べて、約4倍も処理速度が上がっていることが分かりました。

テストに使用したコード

こんなテストコードを用意したよ

Sub 画面更新あり処理時間計測テスト()

'画面更新off
'Application.ScreenUpdating = False


'時間計測 変数定義
Dim start_point As Double
Dim end_point As Double
Dim processing_time As Double
Dim i As Long

'スタート時間取得
start_point = Timer

'新シート追加
Sheets.Add After:=ActiveSheet

'メインルーチン
Dim z As Integer
For z = 1 To 10

'罫線引く
Dim x As Long, countmax As Long, no As Long

countmax = 100

For y = 2 To countmax

Range("A" & y & ":F" & y).Borders.LineStyle = xlContinuous

Next

'新シート追加
Sheets.Add After:=ActiveSheet

Next z

'初期位置に戻る
Sheets("Sheet1").Select
Range("A1").Select

'エンド時間取得
end_point = Timer

'処理時間表示
processing_time = end_point - start_point
MsgBox "処理時間:" & processing_time


'画面更新on
'Application.ScreenUpdating = True

End Sub

Sub 画面更新なし処理時間計測テスト()

'画面更新off
Application.ScreenUpdating = False


'時間計測 変数定義
Dim start_point As Double
Dim end_point As Double
Dim processing_time As Double
Dim i As Long

'スタート時間取得
start_point = Timer

'新シート追加
Sheets.Add After:=ActiveSheet

'メインルーチン
Dim z As Integer
For z = 1 To 10

'罫線引く
Dim x As Long, countmax As Long, no As Long

countmax = 100

For y = 2 To countmax

Range("A" & y & ":F" & y).Borders.LineStyle = xlContinuous

Next

'新シート追加
Sheets.Add After:=ActiveSheet

Next z

'初期位置に戻る
Sheets("Sheet1").Select
Range("A1").Select

'エンド時間取得
end_point = Timer

'処理時間表示
processing_time = end_point - start_point
MsgBox "処理時間:" & processing_time


'画面更新on
Application.ScreenUpdating = True

End Sub

実験結果の表

実験結果の表だよ

回数画面更新あり画面更新なし
10.4218750.117188
20.4492190.109375
30.4492190.105469
40.4726560.109375
50.4257810.109375
60.4648440.125000
70.4882810.105469
80.4765630.121094
90.4609380.105469
100.4414060.128906
平均値0.4550780.113672
画面更新あり・なしの実験結果

実験をするごとにエクセルファイルを閉じてから開き直しをしています。

ご覧になって分かるように、『画面更新をオフ』にした方が処理速度が早いことが証明されました。

注意点

マクロの最初に、

Application.ScreenUpdating = False

マクロの最後に、

Application.ScreenUpdating = True

この2つのコード追記するだけですが、ちょっとしたミスでマクロを壊してしまう可能性もあります。

普段からVBAコードを触る方なら問題ないと感じますが、初めて触るよって方は要注意です。

作業前には必ずエクセルファイルのバックアップを取ることをオススメします。(バックアップと言っても、ファイルコピーするだけですが)

まとめ

ばらもん。

いかがでしたか?

たった2行を追加するだけで、約4倍も処理速度が上がりました。

複雑なマクロ処理ほど、効果絶大です。(特にコピペ多用マクロ)

普段の業務でマクロを使われている方は、ぜひいちど試してみることをオススメします。以上です。

※本記事の内容で実行された結果について、筆者は一切の責任を負いませんので、ご了承ください。 必ず自己責任で実行してください。

お得情報!

こどもチャレンジの紹介コードを無料で公開中!

2021年8月時点で長男は、こどちゃれ1年半継続中です。

現在、なんと!私からの紹介コードを無料で公開しています!

メールアドレスを入力するだけ

こどちゃれって最悪?1年半継続して感じた3つのメリット

よかったらシェアしてね!
目次
閉じる