まえきんブログ

*日常・趣味・体験談・スキルアップ(Excel VBA ×ビジネス統計スペシャリスト)についての雑記ブログ*

【Excel VBA検証 #1】VBA処理速度の改善と検証

まえきんです!

今回はVBAの処理速度について検証します。

私は以前、固定長のテキストデータを読み込むツールを作成しましたが、

どうも処理速度が遅く、どうにかならないものかと悩んでいました。

先日とある書店でVBAの書籍を立ち読みしていると、重いマクロの処理が

激変するVBAコードが存在することを初めて知りました。

そのコードは以下の3つです。

With Application

  .Calculation = xlCalculationManual '①自動計算OFF   

  .EnableEvents = False '②イベント発生OFF   

  .ScreenUpdating = False '③画面表示更新OFF

End With

Applicationはエクセルのアプリケーションを表すオブジェクトで、

これらに備わっている①~③のプロパティをOFFに設定します。

早速検証してみることにしました。より効果を実感するため、

今回は5,000件の固定長テキストデータを用意して検証してみます。

(処理完了時に所要時間がメッセージボックスに

表示されるように少し仕込みしています)

何もしない状態と上記のコードを追加した状態での

処理時間を比較すると以下の通りになりました。

【何もしない】

f:id:maekinblog:20210103222453p:plain

【対策後】

f:id:maekinblog:20210103222511p:plain

約41秒→約26秒とだいぶ早くなりました!

①だけ実装、①・②を実装した場合等いくつかの組み合わせでも

一応試してみましたが、やはり①~③フル実装の状態が

一番処理速度が速くなりました。

数行コードを追加するだけでこれだけ変わるなんて!

Twitterのフォロワーさんからも「感動的に早くなるよ」という

事前情報を頂いていたので、その言葉通り感動しました(^^)

処理内容にもよると思いますが、もし似たような問題を

抱えている場合は試してみる価値はあると思います。

今後またいい素材があれば、こんな感じで検証してみたいと思います!

最後まで読んで頂きありがとうございました!ではまた!

 

忘備録(2021年1月3日 記):

カーソル表示の描画停止も加えるとまた速くなるという貴重な

情報をTwitterのフォロワーさんから頂きましたので、後日に追加検証します(^^)