【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点を行うことで、処理速度が大幅に向上すると思います!

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

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

株式会社ライズウィル

株式会社ライズウィル

〒103-0013
東京都中央区日本橋人形町2-15-1
フジタ人形町ビル7F
TEL : 03-4590-3200
FAX : 03-4590-3201
E-Mail : info@risewill.co.jp
URL : https://www.risewill.co.jp

海上コンテナ輸送管理システム「海コン魂!」
海コン魂!
フルカスタマイズ可能な求人サイトパッケージ
jobtter