【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

ていうか、これらの計算の結果を利用するマクロとかあるよね?

毎回こんなの入れたらダメよダメダメ。

 

 

はい!っていう感じでした。

なんで遅くなったんだろ?たまたまだってことにしておきましょうか😅

したら、またね✋