最近、ダイエットの為に食べ始めた「こんにゃく麺」にはまっているまさとぅーです。
こんにゃく麺はその名の通り、こんにゃくからできており……こんにゃく麺の魅力について熱く語りたいところですが、それはまた別の機会にさせて頂こうと思います。笑
さて、本題です。
前回のブログで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点を行うことで、処理速度が大幅に向上すると思います!
少しでも参考にして頂けたら幸いです。
最後までお読み頂き、ありがとうございました。