プログラミングにおいてループ処理は必須のものですが、ループ回数が多くなると、その処理時間は無視できなくなってきます。特にセルへのアクセス(入出力)を伴う場合は、各段に遅くなるので注意が必要です。
そこで下図のような、セルに100万回数字を書き込むマクロで、速さを比較してみました。
(StartTime=Now()とMsgBox…は無視してください。時間計測用に入れています。)
|
|
●Do Loop 文で100万回セルに書き込んだ場合
|
●左のコードを画面更新なしにした場合
|
ループ処理をDo〜Loop文で実行した場合、私のPCではloop1_1で80秒、Loop1_2で44秒かかりました。
ScreenUpdatingステートメントで画面更新を抑制すると、画面更新する場合よりも半分程度時間を短縮できるようです。
|
|
●For Next 文で100万回セルに書き込んだ場合
|
●左のコードを画面更新なしにした場合
|
今度は同様の処理をFor〜Next文で実行した場合です。loop1_3で73秒、Loop1_4で41秒かかりました。
Loop1_1やLoop1_2に比べて若干速くなりましたが、それほど大差はないようです。
|
|
●配列に格納した後、一挙にセルに出力した場合
|
●左のコードを画面更新なしにした場合
|
最後は、いったん値を配列に格納した後、一括でセルに転記しました。この場合loop1_5、Loop1_6とも1秒で完了しました。
やはり逐次セルに書き込むより、配列を使って一度にセルに出力した方が断然速いようです。
|