配列をセルに出力する際、一次元配列は横方向に出力される。
シート横方向の限界サイズで一次元配列を作成して出力してみた。
Excel2007以降では16,384列もあるが一瞬で終わる。
Option Base 0 Sub 一次元配列の出力テスト() Dim lastColumn As Long lastColumn = Cells.Columns.Count ’16,384列 ReDim myArray1(lastColumn - 1) Dim i As Long For i = LBound(myArray1) To UBound(myArray1) myArray1(i) = "test" & i Next Dim targetRange As Range Set targetRange = Range("A2").Resize(, UBound(myArray1) + 1) targetRange = myArray1 End Sub
縦方向に出力したい場合は少し書き換える。
For i = LBound(myArray1) To UBound(myArray1) Cells(i + 1, 1) = myArray1(i) Next
この手の処理は出力に時間がかかるので、事前に配列をなんやかんやすると良い。
TRANSPOSE関数で行列を入れ替えたり、一次元配列を二次元配列にしたり、、、いろいろ方法がある模様。
ちな本記事のように膨大なサイズの配列を扱う場合、TRANSPOSE関数は非推奨、ダメ。他の方法で配列をなんやかんやしましょう。
シート縦方向の限界サイズで二次元配列を作成して出力してみた。
Excel2007以降では1,048,576行もあるが、数秒で終わった。
Option Base 0 Sub 二次元配列の出力テスト() Dim lastRow As Long lastRow = Cells.Rows.Count '1,048,576行 ReDim myArray2(lastRow - 1, 2) Dim i As Long, j As Long For i = LBound(myArray2, 1) To UBound(myArray2, 1) For j = LBound(myArray2, 2) To UBound(myArray2, 2) myArray2(i, j) = i & "," & j 'Cells(i+1, j+1) = i & "," & j ' 時間かかる Next Next Dim rowSize As Long, columnSize As Long rowSize = UBound(myArray2, 1) + 1 columnSize = UBound(myArray2, 2) + 1 Dim targetRange As Range Set targetRange = Range("A1").Resize(rowSize, columnSize) targetRange = myArray2 End Sub
配列のサイズとセルのサイズを合わせるのが肝心。
出力先のセル範囲が過不足でもエラーにならないので注意。
以上。