【VBA】高速化設定用チートシート クラス作成


どんなチートシート?

私が前から欲しいと思っていたチートシートです。
コピペしてサボれるソースをWeb上に置いておきたくて作りました。
これがあれば、過去の私やそれに近しい人がハッピーになれます。

そもそも

Excelのマクロの高速化には下記のようなテクニックが大切です。

その中で、この設定をしておけば早いという項目がいくつかあります。
その設定をコード内の各所で切り替えると、設定の戻し忘れが発生しやすいです。
ユーザー視点から見て、それは怖いので防止策としてクラスを作成しました。

GitHubに上げようかと思ったのですが、コピペで十分なレベルだったため、
サボってQiitaに直接貼っておきます。

使い方

大前提として、Selectionや「1セルごと書き込みの繰り返し」など、
無駄な処理が消込されていることを確認してください。

まずは下記のクラス内の記述を基にして、クラスを作成します。
その後、このようにToFastEnvironmentToDefaultで重い処理を挟みます。

SampleModule.bas
Public Sub HeavyMethod()
  Dim MyConfig As FastConfig
  MyConfig.ToFastEnvironment("いまとても頑張ってるよ!!")
  '重い処理 Heavy Process...
  Call MyConfig.ToDefault
End Sub

クラス内の記述

FastConfig.cls
Public Sub ToDefault()
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .DisplayAlerts = True
        .Calculation = Excel.XlCalculation.xlCalculationAutomatic
        .StatusBar = False
    End With
End Sub

Public Sub ToFastEnvironment(message As String)
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .DisplayAlerts = False
        .Calculation = Excel.XlCalculation.xlCalculationManual
        .StatusBar = message
    End With
End Sub

Private Sub Class_Terminate()
    Call ToDefault
End Sub

コード解説

  • ToDefault
    • このプロシージャで通常の環境に戻せます。
  • ToFastEnvironment
    • このプロシージャで高速環境が実現できます。
  • Class_Terminate
    • インスタンスオブジェクトが消滅するときに通常の環境に戻します。
  • ScreenUpdating
    • これで画面の更新をオフにしてExcelの表示をフリーズできます。
  • EnableEvents
    • これでWorksheet内などで発生するイベントの多重発生を防ぐことができます。
    • 特にセル入力に対してインテリセンス的な処理を行うときに便利です。
  • DisplayAlerts
    • これで「本当に消しますか?」系のメッセージをオフにできます。
  • Calculation
    • これでセル内の計算の自動実行をオフにしてCPU負荷を減らせます。
  • StatusBar
    • Excelのステータスバー(ウィンドウの一番下の細いところ)にメッセージが表示できます。

関連先輩記事

ファンタグレープうめえ
ExcelVBAを高速化する方法
VBA(Excel)高速化対策 -配列化編-
Excel VBA 高速化における基本設定構文
VBA(Excel)高速化対策 -描画処理無効化編-
VBA 二次元配列を使ってシートに高速で書き込む

まとめ

過去数年間の自分よ!これでラクをしてくれ!
それでは、みなさん、また来週!
コピペでステキなサボりライフを!

Excelsior!