【VBA】Excel限定?高速化
カーソルの場所によって処理速度が変わる?
また仕事が忙しくてブログ書けてないjimです。どうも✋
今回の記事は、ExcelVBAの高速化についてです。
最近、Excelのデータ加工について依頼がないから全然気づかなかったのですが、マクロ実行中にマウスのカーソルがExcelアプリケーション上にあると処理が遅くなるとかならないとか。。。
そうなの?知らんかった。。試してみたい。。。ってことで試してみようのコーナー。
というか、最近はExcelに書くことが少ないから、ScreenUpdatingとかの存在も忘れてたりする。
Excel以外のアプリケーションからExcelを操作すると、Excelって非表示で開こうとしますよね?
描画を止めるもなにも、Excelが非表示なら意味ないじゃんっていう。。。
ってことで、ワークシートの行を5000回Deleteしたタイムを測ってみたよ。
まず、『Application.Cursor = xlWait』を入れずに、カーソルをExcelに当てた場合と当てなかった場合。
Excelにカーソルを当てた場合⇒
Excelからカーソルを外した場合⇒
ほうほう。。若干早いか。。。
じゃあ、『Application.Cursor = xlWait』を入れた場合⇒
あん?
もう一度、10000回削除で測ってみました。
カーソル当てる⇒2.9609375
カーソル外す⇒2.8671875
『.Cursor = xlWait』⇒2.9921875
え?どうした?PC壊れたか!?
えっと、ExcelにVBA仕込む時は少し遅くなるかもしれませんが、一応
『Application.Cursor = xlWait』も入れておきましょう。
Option Explicit Sub Main() Call ExcelEvents(False) '処理 Call ExcelEvents(True) End Sub Private Sub ExcelEvents(ByVal myBoolean As Boolean) With Application .ScreenUpdating = myBoolean '描画停止 .EnableEvents = myBoolean 'イベントマクロ停止 If myBoolean = False Then .Calculation = xlCalculationManual '手動計算 .Cursor = xlWait '砂時計 Else .Calculation = xlCalculationAutomatic '自動計算 .Cursor = xlDefault 'デフォ矢印 End If End With End Sub
Excel以外のアプリケーションからExcelを操作するときは、イベントマクロと自動計算オフった方がいいのかな?
ちなみに、Excel以外のアプリに書くときは、こんな感じでブックを指定してやんないと駄目だったと思う。
CreateObject(“Excel.Application")じゃエラーになる。
Option Explicit Sub e() Dim myBook As Workbook Set myBook = Workbooks.Add myBook.Application.EnableEvents = False myBook.Application.Calculation = xlCalculationManual End Sub
ていうか、これらの計算の結果を利用するマクロとかあるよね?
毎回こんなの入れたらダメよダメダメ。
はい!っていう感じでした。
なんで遅くなったんだろ?たまたまだってことにしておきましょうか😅
したら、またね✋
ディスカッション
コメント一覧
まだ、コメントがありません