\ お買い物マラソン開催中! / 詳細を見る

【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倍も処理速度が上がりました。

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

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

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

\お得情報/(期間限定)

A8.net経由でU-NEXTに加入して、2,000円のセルフバックを受け取りました。(通常時は、1,665円のセルフバック)
U-NEXTに普通に加入するよりも、お得なのでオススメです。

2,000円ゲット

A8.netの管理画面
ばらもん。

普通に加入しちゃうと、セルフバックはありません・・・。それって、もったいないですよ

私はアマプラにも加入しています。
しかし、アマプラだと見ることができないアニメ等もありストレスを感じていました。
(アマプラに加入しているメイン理由は『アマゾンフォト(無制限でクラウドに写真保存可能)』と『アマゾンミュージック』を利用するため)

簡単ではありますが、下記表をご覧ください。

スクロールできます
アマプラ(レンタル含まない)U-NEXT
頭文字D(劇場版含む)
進撃の巨人
ワンパンマン
カイジ(劇場版含む)
R18
作品数(おおよそ)1万本以上約22万本
アマプラでは見れなかったけど、U-NEXTで見ることができたもの(私の見たかったものメイン)

U-NEXTには、1か月無料お試し期間もあります。
少しでも気になった方は、【UNEXTユーネクスト】セルフバックでお得に1か月お試しする技をご覧になってU-NEXTにお得に加入しちゃいましょう!

ばらもん。

お正月はアニメ・ドラマ・映画で盛り上がりました!

\しこちゅ~のリアルを発信ちゅ~/

iPhoneのバッテリー持ちが悪くなってきている方へ!

妻のiPhone7が朝に電池マックスにしていても、昼まで持たなくなってきました・・・。
そこで、アイサポにバッテリー交換をお願いすることにしました。

リアルな体験談を『【アイサポのバッテリー品質ってどうなの?】バッテリー交換を2回お願いしたよ』にまとめました!

こんな人にオススメ!

  • iPhoneのバッテリーがすぐ切れる・・・
  • 液晶も割れているから合わせて修理したい・・・
  • アイサポにiPhoneを持っていくと何をされるのか不安・・・

アイサポは、ほぼ日本全国にあります。

あなたのすぐそばにもアイサポはあるかも?!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次