A1:CV1000(1000行×100列=10万セル)に値を書き出してみます。
Public StartTime As Double
Public EndTime As Double
Sub TimerStart()
StartTime = Timer
End Sub
Sub TimerStop()
EndTime = Timer
MsgBox (EndTime - StartTime & " 秒")
End Sub
Sub Sample01()
[a1:cv1000].Clear
Call TimerStart '---- 測定開始
For r = 1 To 1000
For c = 1 To 100
'-- セルを一つずつ呼び出し
Cells(r, c) = r
Next c
Next r
Call TimerStop '---- 約33.8秒
End Sub
Sub Sample02()
[a1:cv1000].Clear
Call TimerStart '---- 測定開始
'-- 画面の更新を停止
Application.ScreenUpdating = False
For r = 1 To 1000
For c = 1 To 100
'-- セルを一つずつ呼び出し
Cells(r, c) = r
Next c
Next r
Application.ScreenUpdating = True
Call TimerStop '---- 約21.4秒
End Sub
Sub Sample03()
[a1:cv1000].Clear
Call TimerStart '---- 測定開始
Dim x(1 To 1000, 1 To 100)
For r = 1 To 1000
For c = 1 To 100
'-- あらかじめ配列に代入
x(r, c) = r
Next c
Next r
'-- 配列の内容をセルへ一気に書き出し
[a1:cv1000] = x
Call TimerStop '---- 約0.13秒
End Sub
Sample01ではCells()で各セルに直接アクセス。
Sample02はSample01と同じコードで画面の更新を停止。
Sample03ではあらかじめ配列へ代入した後にセルへ一気に書き出しています。
一番遅いSample01でも、1万セルまでであれば3秒程度で終了しますので、1万セルを境にコードの最適化を考えれば十分かも知れません。
0 件のコメント:
コメントを投稿