マクロ(VBA)
 PR

ExcelのVBAを高速化する際のおまじないを詳しく解説

ねこる
記事内に商品プロモーションを含む場合があります

ExcelのVBAでプログラムを組んでいると、高速化したいときってありますよね。

  • 計算処理が多い
  • 別のファイルからデータを取ってきている
  • データ量が多い

こういったときは、高速化のおまじないを入れておくだけで、処理が数倍早くなるので使ってみてください。

おまじないは、プログラムの最初と最後にいれるだけ!
めちゃくちゃ簡単です。

では、VBAを高速化する際のおまじないについて解説します。

なぜ「おまじない」って呼ばれるの?

「おまじない」のことについては、このページの最後で説明しますね!

先に見たい方はこちらから

Excel VBAを高速化する際のおまじない

VBAを高速化するためのおまじないは、こちらの2つです。

2つで1セットです。必ずはじめと、さいごに使用してください。

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

注意しなければいけないのは、エラーでプログラムが止まってしまったとき。「.Cursor = xlWait」でカーソルの制御もしているので、戻らないかもしれません。「.Cursor = xlDefault」として実行してあげたら元に戻ります。

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)の配列ってなに?使い方も紹介します
Excelのマクロ(VBA)の配列ってなに?使い方も紹介します
Sponsor link

Excel VBAを勉強するなら「できる大辞典」がおすすめです。

辞書なのでピンポイントで学ぶことができます。

大学時代、2016年版を購入して勉強していましたが相当使いました。

ネットだけでも勉強はできますが、本を読みながらVBAを勉強したい方は購入してください。

amazonで見てみる

ABOUT ME
ねこる
ねこる
管理者
Mac / プログラミング / Excel / マクロ(VBA) / カメラ

調べたり、効率的なことが好きです。

記事URLをコピーしました