9
15

More than 3 years have passed since last update.

Excel VBAの高速化

Last updated at Posted at 2020-03-24

はじめに

Excel VBAは非ITの現場でもよく使われる言語ですが、重い処理をすると処理速度が遅くなってしまうことが良くあります。今回はそんな時に高速化する方法を紹介します。

高速化一覧

更新設定の変更

ScreenUpdating

処理中に画面の描写を停止することによって処理を速くする事が出来ます。

Application.ScreenUpdating = False

一連の処理が終われば自動的にTrueに戻ります。

Calculation

処理中にSheet上の再計算を止めることによって高速化されます。

Application.Calculation = xlCalclationManual

処理後に自動で戻る事は無いので処理の最後に

Application.Calculation = xlCalclationAutomatic

として自動計算を有効にして下さい。
エラーで落ちた時も自動では戻らないので注意して下さい。

EnableEvents

イベント発生を無効にして高速化します。
無効にすることによってセルのChangeイベント等が発生しなくなります。

Application.EnableEvents = False

Calculation同様に処理終了後にTrueに戻る事は有りませんので注意して下さい

Application.EnableEvents = True

Cursor

カーソルの表示をwaitにすると高速化されます。
(カーソルの変更を判定したり氏なくなって速くなる?)

Application.Cursor = xlWait

これも自動では戻りませんので最後に戻しましょう

Application.Cursor = xlDefault

一括処理

上記は頻繁に使うので纏めてプロシージャにしておくと便利です。

高速化
Sub EnableAcceleration()
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalclationManual
        .EnableEvents = False
        .Cursor = xlWait
    End With
End Sub
高速化解除
Sub DisableAcceleration()
    With Application
        .Calculation = xlCalclationAutomatic
        .EnableEvents = True
        .Cursor = xlDefault
    End With
End Sub

セルへのアクセスを減らす

セルへのアクセスが増えると処理が遅くなるのでセルへのアクセスを極力減らして高速化します。

配列に入れる

一括で配列化する事によりセルへのアクセスが減り処理を高速化出来ます。
Range型をVariant型に代入すると自動では二次元配列として扱われます。

Dim rng As Variant
rng = Worksheets("Sheet1").UsedRange

配列をセルに一括書き込みをする事もできます。
セルへの書き込みは読み込みより重い処理なので特に一括書き込みは有効です。
※但しセル範囲が二次元配列と同じサイズで無くてはなりません。

Dim arr(1 to 2, 1 to 2) As Variant
arr(1, 1) = "foo"
arr(1, 2) = "bar"
arr(2, 1) = "hoge"
arr(2, 2) = "hage" 

'これはOK
Worksheets("Sheet1").Range("A1:B2").value = arr

'これはNG
Worksheets("Sheet1").Range("A1:B1").value = arr

変数に入れる

セルに何度もアクセスする場合、変数に代入すると高速化されます

Dim rng As Range
Dim i As Long
set rng = Worksheets("Sheet1").Range("A1")

For i = 1 To 100000
   rng.Value = i
Next

但し一回きりの場合は直接アクセスする方が速いです。

関連記事

My Accounts

9
15
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
9
15