【VBA高速化】VBA高速化テクニック②【事務のおばちゃんでも簡単】

今回は、Excel VBAのプログラムを高速化するために使えるテクニックを1つ紹介します。
これは既存のExcel VBAのプログラムを少し修正して改善できるテクニックではありません。
しかし、「Excel VBA でプログラムを書けます」と言えるためには必須のテクニックですので、
是非身につけて頂ければと思います。



テクニックの概要

今回は、ソースコードを紹介する前に、今回シェアするテクニックの概念について説明します。
(概念といっても大それたものではありません。)

Excel VBAにおいて主となる処理の1つに、「セルへのアクセス」があります。
特にセルの値を読む操作は頻出処理だと思います。

Excel VBA においては、「セルにアクセスする回数」分、処理時間がかかります

例えば、行挿入処理を例にします。
行挿入処理は、Ctrl Shift + といった3つのキーを同時押しすることでできます。
- Excelにて、上記ショートカットキーを10回押して行挿入した場合
- 10行選択して1回ショートカットキーを押した場合
この2つの処理の処理時間はどう変わるでしょうか。
10行選択して1回ショートカットキーを押した場合の方が圧倒的に速いと思います。

セルへアクセスする処理は全て上記の法則が適用されます。

今回は、「セルにアクセスする回数」が多くなりがちな処理である、
セルの値の読み込みについて、具体的なプログラムを共有します。

ソースコード

それではソースコードを以下に記載します。

上記プログラムの実行速度は以下の通りです。

実行回数FastCellReaderSlowCellReader
1回目1.08秒11.69秒
2回目 1.10秒12.57秒
3回目0.96秒12.06秒

上記の通り、SlowCellReaderは、FastCellReader の10倍程度処理時間を要しています。

[補足]
セルの値の読み込み以外のセル操作についても上記概念は通用します。
例えば、罫線を設定したい場合においても、広範囲を選択して1度に罫線を設定することで、
処理時間を大幅に短縮できます。



まとめ

今回は、Excel VBAの処理速度向上のためのテクニックを紹介しました。
大事なポイントは以下2点。
 - Excel VBA においては、「セルにアクセスする回数」分、処理時間がかかる。
 - セルから値を取得する処理は、一度に全て値を取得することで値取得処理については10倍性能が向上する。

「Excel VBAを使える」と言えるようになるためには今回紹介したテクニックは必須ですので、
是非今回のテクニックを身につけましょう。