W.I.S. Laboratory
menu-bar

Excel 2013


Excel 2013 のVBAで ScreenUpdating = False をやっても処理が遅い

ExcelのVBA実行時に、ScreenUpdating = False としておくと画面描画が止まるので処理が速くなる、というのは半ば定石なのだが、Excel2013でこれをやっても遅いままということがある。
他にも、Calculation = xlCalculationManual や EnableEvents = False なども効果的なので、よくやるのが

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False



Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

と3つをまとめて記述し、時間のかかる処理を挟む方法だ。

しかし、このようにしてもExcel2013だとマウスポインタのチラつきが時間を食ってしまい、期待したほど速くならないことがある。
この場合は、時間のかかる処理の手前でマウスポインタを砂時計にしておき、処理が終わったら元に戻す、という方法でうまくいくことがある。
これでも遅いなら、セルの書き込み時にVariant変数を経由してしまったほうがいいかもしれない。

Application.Cursor = xlWait '←マウスポインタを砂時計にする
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False



Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.Cursor = xlDefault '←マウスポインタを元に戻す

[ 戻る ]
saluteweb