ExcelのVBAを高速化する際のおまじないを詳しく解説
ExcelのVBAでプログラムを組んでいると、高速化したいときってありますよね。
- 計算処理が多い
- 別のファイルからデータを取ってきている
- データ量が多い
こういったときは、高速化のおまじないを入れておくだけで、処理が数倍早くなるので使ってみてください。
おまじないは、プログラムの最初と最後にいれるだけ!
めちゃくちゃ簡単です。
では、VBAを高速化する際のおまじないについて解説します。
「おまじない」のことについては、このページの最後で説明しますね!
先に見たい方はこちらから
Excel VBAを高速化する際のおまじない
VBAを高速化するためのおまじないは、こちらの2つです。
WithからEnd Withまでをコピーして、プログラムのはじめに貼り付けてください。
1Sub vbaSpeedUpStart()
2
3 With Application
4 .ScreenUpdating = False
5 .EnableEvents = False
6 .Calculation = xlCalculationManual
7 .Cursor = xlWait
8 End With
9
10End Sub
こちらは元に戻すプログラムです。
同じくWithからEnd Withまでをコピーして、プログラムおわりに貼り付けてください。
1Sub vbaSpeedUpEnd()
2
3 With Application
4 .ScreenUpdating = True
5 .EnableEvents = True
6 .Calculation = xlCalculationAutomatic
7 .Cursor = xlDefault
8 End With
9
10End Sub
これで高速化ができましたね!
高速化を目的にしているということは、プログラムが長くなっていませんか?
1つのファイルにプログラムが何個もある場合、プロシージャ(Sub〜End Sub)が多くなりますよね。
プロシージャ(Sub〜End Sub)が多くなると、上記のおまじないを複数書くことになってしまい、プログラムが長くて読みづらいです。
そういったときは、「おまじない」のプロシージャを作って省略しましょう。
下記を標準モジュールの一番上にコピーします。
全部コピーしたい方は上のコードをコピーしてね。
1Sub vbaSpeedUpStart()
2
3 With Application
4 .ScreenUpdating = False
5 End With
6
7End Sub
8
9Sub vbaSpeedUpEnd()
10
11 With Application
12 .ScreenUpdating = True
13 End With
14
15End Sub
そして、いつもプログラムを書いているSubの下にこちらを書きます。
1Call vbaSpeedUpStart
これで「vbaSpeedUpStart」に記載した設定が読み込まれます。
プログラムの終わりにはこちらを書きます。
1Call vbaSpeedUpEnd
Excel VBA高速化のおまじない:画面制御
それでは、VBA高速化の細かい部分について解説していきます。
1With Application
2 .ScreenUpdating = False
3End With
1行でもOKです。
1Application.ScreenUpdating = False
元に戻す場合はこちら
1Application.ScreenUpdating = True
ScreenUpdatingでは、画面表示の制御をしていいます。
True:画面表示をオンにします。プログラム実行中にセルに変更があれば表示されます。
False:画面表示をオフにします。プログラム実行中にセルに変更があっても表示されません。
セルに値を書き込んだり、色をつけたり、線を変更したりするとプログラム実行速度は遅くなるので、画面表示をオフにして速度を早めます。
ScreenUpdatingだけでも使用できるので、他のイベント制御やカーソル制御が不要な場合は、上記の3行だけコピーしてお使いいただけます。
Excel VBA高速化のおまじない:計算制御
1With Application
2 .Calculation = xlCalculationManual
3End With
1行だけでもOKです。
1Application.Calculation = xlCalculationManual
こちらでは計算の制御をしています。
元に戻す場合はこちら
1Application.Calculation = xlCalculationAutomatic
Excelは元々オートで計算してくれていますよね。
例えば、セルに計算式をいれてくと、式の値が変わると結果も変わっていませんか?
これも画面表示の制御と同じで、セルに変更が加わっているのでプログラム実行速度が遅くなるというわけです。
ですので、計算モードをマニュアルに変更して、セルに変更が加わらないようにすることでプログラム実行速度をあげています。
Excel VBA高速化のおまじない:イベント制御
1With Application
2 .EnableEvents = False
3 End With
1行でもOKです。
1Application.EnableEvents = False
こちらでは、イベントの制御をしています。
元に戻す場合はこちら
1Application.EnableEvents = True
イベントとは、
- シートがアクティブになった
- セルをダブルクリックした
- ファイルが保存された
- などなど
多くの事柄があります。
Excel VBA高速化のおまじない:カーソル制御
1With Application
2 .Cursor = xlWait
3End With
1行でもOKです。
1Application.Cursor = xlWait
こちらではカーソルの制御をしています。
元に戻す場合はこちら
1Application.Cursor = xlDefault
カーソルは、マウスポインタのことですね。
砂時計になったり、グルグルまわっていたりしませんか?
これも画面表示のときと同じで、画面の中の一部ではありますが、切り替えを止めることでプログラムの実行速度を早めます。
ただし、注意点があります。
エラーが起きたとき、最後の元に戻すプログラムが実行されていない場合がほとんどです。
そういったときは、「Application.Cursor = xlDefault」だけで構わないので実行すると元に戻ります。
1Sub vbaCursorDefault()
2
3 Application.Cursor = xlDefault
4
5End Sub
なぜ「おまじない」って呼ばれるの?
プログラムには「おまじない」と呼ばれるものがあります。
今回のおまじないはこれですね。
1Sub vbaSpeedUpStart()
2
3 With Application
4 .ScreenUpdating = False
5 .Calculation = xlCalculationManual
6 .EnableEvents = False
7 .Cursor = xlWait
8 End With
9
10End Sub
C言語やJavaにも、もちろん存在します。
なぜおまじないと呼ばれるのでしょうか?
それは、プログラムコードの中で考えることなく、記載すればいいものだからです。
「VBAの高速化といったらこれ!」みたいな感じですね。
C言語をプログラミングするときには、「#include<>…….」
HTMLなら「<html><header>….」
と決まり文句を「おまじない」と呼んでいます。
使う頻度が多いのであれば、単語登録に登録してすぐに呼び出せるようにしてもいいかもしれませんね。
VBAで高速化を考えている方には、ぜひとも配列を使ってみてほしいです。
今回のおまじないよりも高速化が可能です。
Excel VBAを勉強するなら「できる大辞典」がおすすめです。
辞書なのでピンポイントで学ぶことができます。大学時代、2016年版を購入して勉強していましたが相当使いました。
ネットだけでも勉強はできますが、本を読みながらVBAを勉強したい方は購入してください。