マクロ開発時、二次元配列の要素数が読めない場合、RedimPreserveで指定や要素の入れ直しで
二次元配列を最小の要素数→任意の行数の配列で処理することは、処理自体奇麗と考えます。
処理は奇麗でも、件数が多いと処理スピードが業務に耐えられない場合があります。
10万行程度であれば上記やり方でもいいですが、30万行~100万行処理しようとすると、処理が追いつきません。
RedimPreserveより事前に領域確保したほうが速度が出る
下記のarr1とarr2()は同じように見えます。
実際にはVariant型なのか、Variant型の配列として定義されているかの違いはあります。
Public Sub test()
Dim ExArray As Variant
Dim sLen As Long
'■①ループしながら配列+1を再定義→要素を入れなおす→配列に値を入れるを10万回繰り返す
ReDim ExArray(5, 1)
sLen = UBound(ExArray) + 1
Dim i As Long
For i = 1 To 100000
ExArray = Call_ArraySizeUp(ExArray, sLen)
sLen = UBound(ExArray) + 1
ExArray(i, 1) = "aaa"
Next
'■②事前に20万行定義、配列に値を入れる→10万回処理後、不要行をCall_ArraySizeDownで削除
ReDim ExArray(200000, 1)
For i = 1 To 100000
ExArray(i, 1) = "aaa"
Next
sLen = UBound(ExArray)
ExArray = Call_ArraySizeDown(ExArray, sLen)
End Sub
まとめ
- ①と②であれば②のほうが圧倒的に早いです。(実結果は省略)
- プログラムなんて学校の勉強と違い、正解は複数あります。
※そのコードで進めるメリット・デメリットを考える必要があると思っています。
上記であれば20万行を超えたらどうするの?って問題は残りますよね。
なのでこれが正解!はなく、より良くしていく心意気が大切と考えています。



コメント