今日仕事でハマったのでメモ。
やりたいこと
複数のブックを、ひとつの新規ブックにまとめるマクロを作ったけど、
ひとつひとつのブックのデータ量が多くなってきたせいか、
途中でマクロが落ちるようになった。
なので高速化すべく、以下のように改良する
現行
For 1 to (ファイル数)
'ブックを開く
'データの範囲を新規ブックにコピペ
'ブックを閉じる
Next
改良案
'描画を停止する
Application.ScreenUpdating = False
For 1 to (ファイル数)
'ブックを開く
'データの範囲を配列に保持
'ブックを閉じる
Next
'新規ブックに配列の中身を一括ペースト
とまあここまではいいとして。
(さりげなくApplication.ScreenUpdating = Falseも導入)
配列のイメージはこんな感じ。
で、xをReDimで増やしていけばいいかなと思っていた。
Dim array As Variant
ReDim Preserve array(x, 3)
' 番号 名前 データ
' 1 name1 1
' 2 name2 2
' 3 name3 3
' : : :
' x namex x
ReDim Preserveで要素数を変更できるのは、最後の要素に限られるとのこと。
つまり、2次元の場合は「列」しか増やせない…
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/statements/redim-statement
じゃあ行列をひっくり返して、横方向にデータを突っ込んでいけばいいな!
っていうことで来週改修します。