【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
ていうか、これらの計算の結果を利用するマクロとかあるよね?
毎回こんなの入れたらダメよダメダメ。
はい!っていう感じでした。
なんで遅くなったんだろ?たまたまだってことにしておきましょうか😅
したら、またね✋



ディスカッション
コメント一覧
まだ、コメントがありません