VBA・Excel マクロを簡単に高速化する4つの方法!

この記事は約5分で読めます。
VBA スピードアップ

Photo by yulinar rusman on Unsplash

 

どうもマサヤです!

・マクロを高速化するコードって何があったっけ?
・簡単に高速化出来るコードあったよな~

マクロ作っているとたまに忘れることありますよね)笑

 

コード忘れちゃったからコードだけ知りたい!
そんなアナタと私のための高速化できるコードを紹介していきます。

忘れた時にどうぞ!コピペしてお使いください。

 

 

スポンサーリンク

画面更新を非表示にする:Application.ScreenUpdating

 

セルへの読み込みや書き込み回数が多いときに抜群の効果を発揮してくれるコードです。

有名ですよね。私もかなりの頻度でお世話になってます。

 

Application.ScreenUpdating = False '更新を無効

Application.ScreenUpdating = True  '更新を有効

 

 

イベントを抑制する:Application.EnableEvents

 

イベントトリガーによる負荷を軽減し高速化できます。
高速化だけでなく意図的にイベントを制御したいときにも使います。

 

Application.EnableEvents = False  'イベントを無効

Application.EnableEvents = True  'イベントを有効

 

 

自動計算を停止する:Application.Calculation

 

これも有名ですね。数式をたくさん使っているExcelに効果的ですね!

ファイルサイズが大きいExcelを開くときにもたまに使用します。
手動計算にしてから起動すると少し速くなります。
ファイルサイズを小さくする努力などは言わない方向で)笑

 

Application.Calculation  = xlCalculationManual   '手動計算

Application.EnableEvents = xlCalculationAutomatic  '自動計算

 

 

ステータスバーを無効にする:Application.DisplayStatusBar

 

重い処理するやそもそもファイルサイズが大きい場合、ステータスバーを無効にします。

地味に速くなりますよね。

 

Application.DisplayStatusBar = False '無効

Application.DisplayStatusBar = True  '有効

 

 

まとめて無効したい!コピペでご使用ください。

 

いやいや、さっくり全部無効にしたいんだけど・・・
私もそう思います。

なので、一まとめにしたコードを置いておきます。
どうぞサクッとコピーしてご使用してください!

 

◆ 無効 ◆

With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .DisplayStatusBar = False
    .Calculation = xlCalculationManual
End With

 

◆ 有効 ◆

With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .DisplayStatusBar = True
    .Calculation = xlCalculationAutomatic
End With

 

 

関数にしたものも用意しました。

 

コードを見やすくしたい・・・そんなアナタために関数にしました!
関数名は微妙なので変更していただくことをお勧めします)笑

 

Sub SpeedUp(flg)

If flg Then
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .DisplayStatusBar = True
        .Calculation = xlCalculationAutomatic
    End With
Else
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .DisplayStatusBar = False
        .Calculation = xlCalculationManual
    End With
End If

End Sub

 

呼び出し方は以下となります。

Call SpeedUp(False) ’無効

’ここに処理

Call SpeedUp(True)  ’有効

 

 

まとめ

 

コードだけを紹介したかったので、文章は控えめにしました。

今回は手軽に高速化できるコードを紹介しました。備忘録に近いですしね。

 

簡単さを除けば、高速化の方法は他にも色々あります。
例を挙げるとセル範囲を2次元配列にまとめて格納して処理する方法があります。

 

この方法は私を救ってくれたといっても過言ではありません。
残業時間をどれほど削ってくれたことか!感謝しかありません。

いつかアナタにも紹介しますね。

コメント