オフィス・ブール ロゴ
【レスキュー連絡先】
代表 : 末永 尚登
TEL: 070-4087-0025 FAX:095-893-6090
3.ループ処理の高速化について(セルアクセス)

プログラミングにおいてループ処理は必須のものですが、ループ回数が多くなると、その処理時間は無視できなくなってきます。特にセルへのアクセス(入出力)を伴う場合は、各段に遅くなるので注意が必要です。

そこで下図のような、セルに100万回数字を書き込むマクロで、速さを比較してみました。
(StartTime=Now()とMsgBox…は無視してください。時間計測用に入れています。)

コード例1 コード例2
●Do Loop 文で100万回セルに書き込んだ場合 ●左のコードを画面更新なしにした場合

ループ処理をDo〜Loop文で実行した場合、私のPCではloop1_1で80秒、Loop1_2で44秒かかりました。
ScreenUpdatingステートメントで画面更新を抑制すると、画面更新する場合よりも半分程度時間を短縮できるようです。

コード例3 コード例4
●For Next 文で100万回セルに書き込んだ場合 ●左のコードを画面更新なしにした場合

今度は同様の処理をFor〜Next文で実行した場合です。loop1_3で73秒、Loop1_4で41秒かかりました。
Loop1_1やLoop1_2に比べて若干速くなりましたが、それほど大差はないようです。

コード例5 コード例6
●配列に格納した後、一挙にセルに出力した場合 ●左のコードを画面更新なしにした場合

最後は、いったん値を配列に格納した後、一括でセルに転記しました。この場合loop1_5、Loop1_6とも1秒で完了しました。
やはり逐次セルに書き込むより、配列を使って一度にセルに出力した方が断然速いようです。



 


オフィス・ブール ロゴ 所在地:長崎県長崎市  代表:末永尚登
E-mail: suenaga@officeboole.com   TEL: 070-4087-0025  FAX: 095-893-6090