2012年10月24日水曜日

【Excel】繰り返しセルの値を更新する時のパフォーマンスアップ

こんにちは。部隊長です。
秋ですが飽きもせずExcelネタ。色々寒風寒々しくなってまいりました。

まず、Excelでセルに値を入れる時、ループで1セルずつ処理すると大変遅うございます。

こんなの。100行×100列処理
        
dim r as range, i as long, j as long
set r = thisworkbook.workshees("sheet1").range("a1")
for i = 0 to 100
  for j = 0 to 100
    range.offset(i,j).value = hoge
  next
next
処理時間は1秒弱でしょうか? ScreenUpdating = False を使えばほぼ気にならないですが、 実際のプログラムだとこのループの間に計算式や他のセル参照などが入っていたりしてどんどん重くなってしまっていると思います。

そこで・・・

値を予め二次元配列に入れて、同じ大きさのRANGEに貼り付けるととても速いのです。

こんな感じ
        
dim r as range, i as long, j as long
dim ary(100,100) as variant
set r = thisworkbook.workshees("sheet1").range("a1")
for i = 0 to 100
  for j = 0 to 100
    ary(i,j) = hoge
  next
next

r.resize(i+1,j+1) = ary


マクロが遅くてお困りの方、お試しください!


0 コメント:

コメントを投稿