3
7

More than 3 years have passed since last update.

EXCEL VBA 高速化クラス作成

Last updated at Posted at 2020-03-26

はじめに

前回にExcel VBAの高速化の記事を書きました。
https://qiita.com/loach/items/3ae9100034ecf2d804ce

今回は記事内で紹介している画面更新の設定のクラス化を書きます.
画面更新の停止をコンストラクタに書くことで、クラスをインスタンス化した時点で画面の更新を止めて高速化し、更新を有効化をデストラクタに書くことによってオブジェクトが開放された時点で自動的に更新を有効化することが出来ます。

前回の記事では通常のプロシージャでしたが今回はクラスという事でインスタンス化するためほんの少し処理負荷が大きくなりますが、本当に些細な差であり処理の最初に一回だけ実行するものである為、問題になることはないでしょう。
また、通常のプロシージャの場合、早期リターン等で終了条件が複数ある場合、そのたびに更新の有効化を明示的に書く必要がありましたがクラスのデストラクタの場合はその必要がありません。

※エラー等で処理が止まってしまった場合はデストラクタが実行されませんので注意してください.

高速化クラス作成

クラスモジュールを作成して以下コードを記入してください。
今回はクラス名はAcceleratorとしています。

Accelerator
Private Sub Class_Initialize()
    '画面の更新を停止
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalclationManual
        .EnableEvents = False
        .Cursor = xlWait
    End With
End Sub

Private Sub Class_Terminate()
    '画面の更新を有効化
    With Application
        .ScreenUpdating = True
        .Calculation = xlCalclationAutomatic
        .EnableEvents = True
        .Cursor = xlDefault
    End With
End Sub

Public Sub Init()
    ' 宣言時にNewをした場合コンストラクタが走らないためこのプロシージャを使用する
End Sub

使用方法

処理の先頭でインスタンス化して下さい。

Dim Ac As Accelerator
Set Ac = New Accelerator

宣言時にNewをする場合は以下のようにInitを使用してください

Dim Ac As New Accelerator
Ac.Init

処理が終わりオブジェクトが開放された時点で画面の更新は有効化されます。

終わりに

以上がExcel VBA高速化クラスの作成方法です。
この記事を読んでくださりありがとうございます。

関連記事

My Accounts

3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7