VBAで教えていただきたいのですが 指定したページの値がなくなるまで2次元配列にデータを格納して 別シートに一括でコピーするマクロを作成しているのですが 今回の場合、2次元配列(36,13)しか使用していないのに 実行したときに『メモリが不足しています』とでるのです。 PCのメモリは64GBあるのですが マクロの組み方が悪いのでしょうか? 行が増えるごとにネットで見つけた2次元配列の1次元目を増やすモジュールで 増えるようにしています。 理由がわからないので、わかる方教えていただけないでしょうか? よろしくお願いします。 Sub データ取得() Dim shutoku_i As Variant Dim sLen As Long Dim CT As Integer Dim x As Integer Dim 写真帳 As Workbook Dim sheetname1 As Variant sheetname1 = ActiveSheet.Name Set 写真帳 = ActiveWorkbook CT = 1 x = 2 ReDim shutoku_i(CT, 13) データ格納: With 写真帳.Worksheets(sheetname1).Cells(x, 12) shutoku_i(CT, 1) = .Offset(0#).Value shutoku_i(CT, 2) = .Offset(2, -9).Value shutoku_i(CT, 3) = .Offset(2, -5).Value shutoku_i(CT, 4) = .Offset(2, 0).Value shutoku_i(CT, 5) = .Offset(2, 2).Value shutoku_i(CT, 6) = .Offset(3, -9).Value shutoku_i(CT, 7) = .Offset(3, -5).Value shutoku_i(CT, 8) = .Offset(3, 0).Value shutoku_i(CT, 9) = .Offset(3, 2).Value shutoku_i(CT, 10) = .Offset(4, -9).Value shutoku_i(CT, 11) = .Offset(4, -5).Value shutoku_i(CT, 12) = .Offset(4, 0).Value shutoku_i(CT, 13) = .Offset(4, 2).Value If .Offset(36, 0).Value <> "" Then sLen = UBound(shutoku_i) + 1 shutoku_i = Call_RedimPreserveArray(shutoku_i, sLen) x = x + 36 CT = CT + 1 GoTo データ格納 End If End With Dim iRowMax '// 二次元配列の最大行数 Dim iColMax '// 二次元配列の最大列数 '// 1次元目の要素数を取得 iRowMax = UBound(shutoku_i, 1) - LBound(shutoku_i, 1) + 1 '// 2次元目の要素数を取得 iColMax = UBound(shutoku_i, 2) - LBound(shutoku_i, 2) + 1 Worksheets("sheet1").Activate '// Rangeオブジェクトで貼り付けるセル範囲を指定する場合 Range(Cells(2, 1), Cells(iRowMax, iColMax)).Value = shutoku_i '列幅修正 Columns("A:M").EntireColumn.AutoFit Range("A1").Select End Sub Option Base 1 '■2次元配列の1次元目を増やすモジュール Public Function Call_RedimPreserveArray(ByVal arr As Variant, ByVal sLen As Long) Dim temp() As Variant temp = WorksheetFunction.Transpose(arr) ReDim Preserve temp(UBound(temp, 1), sLen) Call_RedimPreserveArray = WorksheetFunction.Transpose(temp) End Function
Visual Basic