VBA高速化テクニック
ずいぶん昔にやったネタですが、未だに多くの方が参考にしてくださっているようです。動作の確認に使った環境も、さすがに時代を感じる古くささでしたし、文章も恥ずかしくて冷や汗が出てきます(^^;
そこで、思い切ってやり直します。Excelのバージョンもあがりましたし、もしかすると昔とは違った結果が出るかもしれません。
VBAでは、同じ処理を行うマクロでもいろいろな記述が許されていますが、記述の仕方で速度が大幅に改善されるケースも珍しくありません。そこで、具体的に「どう書いたらどの程度速くなるのか」を実際に検証して、その結果をレポートしてみます。マクロを作成するときの参考にしていただければ幸いです。
| | Test1 | Test2 | % |
| 1回目 | 01:30 | 00:15 | 16.67% |
| 2回目 | 01:29 | 00:14 | 15.73% |
| | : | : | : |
| 10回目 | 01:30 | 00:14 | 15.56% |
| 平均 | 01:30 | 00:14 | 16.09% |
| | ↑ | | |
| | 1分30秒 | | |
レポートは、左のような形式で結果を報告します。
それぞれの所要時間を、「分:秒」単位で記録します。
基本的に各テストを10回繰り返し、「平均(=AVERAGE(1回目:10回目)」を含めて表示します。
特に記載のない限り、高速化したコードが「Test2」です。「%」は単純に(Test1/Test2)という式で求めています。
どの処理にどれくらいの時間がかかったか…ではなく、コードの書き方によってどれくらい短縮したかを参考にしてください。
なお、今回テストに使用した環境は次の通りです。
CPU:AMD 1.0 GHz
メモリ:512MB
OS:Windows XP Home Edition
Excel:Excel 2002
ショップブランドですが、特別なマシンではありません。どこにでもある環境です。
また、IEのバージョンなどはVBAの動作速度に影響を与えないと思います。
ちなみに、この時点では6.0でした。
- 無駄な表示を止める
- 無駄なSelectをしない
- 余計なことはしない
- 何度も同じことをしない
- 個別に呼ばない
- 型を指定する
- 名前で呼ばない
- 標準のプロパティ
- 関数も使おう
- セルの指定方法
- セルを配列に入れる
- 文字列型関数を使う