⌚ 2020/12/14 (Mon) 🔄 2024/3/20 (Wed)
VBA高速化テクニック
入社して早2年目、最近の案件でVBAを触ることが多くなって
効率的な組み方を調べていたときに感動した話についてです。
PMOの案件で進捗管理や課題管理等の集計を行う際に、
Excelのマクロで管理するためにVBAを使っていましたが、
データが多く雑な組み方をするとかなり時間がかかってしまいました。
画面の更新をオフ
まずは、画面の更新をオフにすること
-
構文
―――――――――――――――――――――――――
Application.ScreenUpdating = False
―――――――――――――――――――――――――
ブックを開いてシートを変更してセルの値をコピペするという
単純なマクロでもデータが多いだけでかなり時間がかかりますが、
これを入れておくだけで格段に早くなりました。
無駄なSelect
次は、無駄なSelectをしないこと
-
構文
―――――――――――――――――――――――――
Sheets("Sheet1").Select
Range("A1").Select
ActiveCell.Copy
↓
Sheets("Sheet1").Range("A1").Copy
―――――――――――――――――――――――――
セルやシートを操作する際にわざわざアクティブ化しなくても
直接指定することでこれも格段に早くなりました。
ブックでも同じなのでブックやシートの移動が激しいマクロではかなり有効です。
ワークシート関数
最後に、ワークシート関数を使うこと
-
構文
―――――――――――――――――――――――――
WorksheetFunction.関数名(引数)
―――――――――――――――――――――――――
簡単な例でいうとセルのある範囲の値で足し算をするときは+演算子よりも
WorksheetFunction.Sum関数を使うとかなり早くなりました
ま と め
以上、3点挙げましたがVBAの高速化の方法はまだまだたくさんあります。
VBAを組んでいて遅いと感じた方は、まずは上記の3点を試してみてください。