【ExcelVBA】マクロを高速化する3つの方法

みなさんお久しぶりです!
最近、ダイエットの為に食べ始めた「こんにゃく麺」にはまっているまさとぅーです。

こんにゃく麺はその名の通り、こんにゃくからできており……こんにゃく麺の魅力について熱く語りたいところですが、それはまた別の機会にさせて頂こうと思います。笑

さて、本題です。

前回のブログでExcelVBA自動化ツールをご紹介させて頂きました。
今回は、マクロが遅いと感じた時に役立つExcelVBA・マクロ高速化の方法をご紹介させて頂きたいと思います。

【ExcelVBA】自動化ツールのご紹介 の記事はこちら

ExcelVBA・マクロ高速化

VBAマクロを用いることで、Excelを使用する定型作業を自動的に行うことが可能になりました。
しかし、大量データを処理すると必然的に処理時間は掛かるようになってしまい、複雑な処理を行うと数時間処理が終了しない!なんてこともよくあります。
そんな処理の遅さを今すぐ簡単に解消できる(かもしれない?)方法を3点ご紹介させて頂きます。

1.シートの更新を停止する
2.イベントを抑制する
3.数式計算を「手動」にする

上記について、解説させて頂きます。

1.シートの更新を停止する
セルに対しデータをセットする処理等行う場合、1処理毎にシートの更新が行われます。
処理するデータが少ない場合は、それほど影響はありませんが、大量データを処理する場合、シートの更新を行うだけでかなりの時間を要します。

シートの更新を停止するには「Application.ScreenUpdating = False」と指定します。
シートの更新を停止することで、セルにデータを貼ったり、シートを切り替えたり、他のブックを開いたりしても画面には表示されなくなります。


Private Sub Tips1
'シートの更新を停止
Application.ScreenUpdating = False
'時間のかかる処理

'シートの更新を再開する
Application.ScreenUpdating = True
End Sub
処理の最後に「Application.ScreenUpdating = True」と指定し、シートの更新を再開するのを忘れないでください。
2.イベントを抑制する
マクロ動作中に別のイベントが発生するのを抑制します。
例えば、繰り返し処理でセルに値をセットする処理の場合、セルに値をセットする度に「Worksheet_Change」イベントが発生してしまいます。

※Worksheet_Changeイベント…セルの値を変更した時に発生するイベント

イベントを抑制するには「Application.EnableEvents = False」と指定します。
イベントを抑制することで、VBAマクロ実行中にイベントが発生しなくなります。


Private Sub Tips2
'イベント抑制
Application.EnableEvents = False
'時間のかかる処理

'イベント再開
Application.EnableEvents = True
End Sub
処理の最後に「Application.EnableEvents = True」と指定し、イベントを再開するのを忘れないでください。
3.数式計算を「手動」にする
Excelは以下の場合、数式計算を実行します。

・セルの値が変わったとき
・セルの数式が変更されたとき

上記はVBAマクロ処理中でも実行され、数式を多数使用していた場合、その都度、数式計算が実行され、それだけで処理時間は長くなってしまいます。
数式計算を「手動」にし、数式計算を自動で行われなくすることで、処理速度が向上します。

数式計算を「手動」にするには「Application.Calculation = xlCalculationManual」と指定します。

Private Sub Tips3
'数式計算を「手動」にする
Application.Calculation = xlCalculationManual
'時間のかかる処理

'数式計算を「自動」にする
Application.Calculation = xlCalculationAutomatic
End Sub
処理の最後に「Application.Calculation = xlCalculationAutomatic」と指定し、
数式計算を「自動」にするのを忘れないでください。

処理が遅いなーとお悩みのあなた!今一度処理を見直してみてください。
今回挙げさせて頂いた上記3点を行うことで、処理速度が大幅に向上すると思います!

少しでも参考にして頂けたら幸いです。

最後までお読み頂き、ありがとうございました。
DXO株式会社

DXO株式会社

〒103-0014
東京都中央区日本橋蛎殻町2-13-6
EDGE水天宮8F
E-Mail : contact-info@dxo.co.jp
URL : https://dxo.co.jp