행 A에서 시트 B까지 약 30k 행 (정확하게는 행의 일부 요소)을 복사하고 행 번호 36155에서 대상을 시작합니다. 때때로 G 열에있는 숫자에 따라 행을 두 번 이상 복사합니다.VBA에서 대용량 데이터 복사하기
Sub copy()
ActiveSheet.DisplayPageBreaks = False
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculate
Dim k As Long, k1 As Long, i As Integer
k = 36155
k1 = 30000
For i = 1 To k1
For j = 1 To Sheets("A").Range("G" & i + 2).Value
Sheets("B").Range("A" & k).Value = Sheets("A").Range("A" & i + 2).Value
Sheets("B").Range("B" & k).Value = Sheets("A").Range("B" & i + 2).Value
Sheets("B").Range("C" & k).Value = j
Sheets("B").Range("D" & k).Value = Sheets("A").Range("C" & i + 2).Value
Sheets("B").Range("E" & k).Value = Sheets("A").Range("D" & i + 2).Value
Sheets("B").Range("F" & k).Value = Sheets("A").Range("E" & i + 2).Value
Sheets("B").Range("G" & k).Value = Sheets("A").Range("F" & i + 2).Value
Sheets("B").Range("H" & k).Value = Sheets("A").Range("I" & i + 2).Value + (j - 1) * Sheets("A").Range("H" & i + 2).Value
Sheets("B").Range("I" & k).Value = Sheets("A").Range("J" & i + 2).Value
k = k + 1
Next j
Next i
Application.EnableEvents = True
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
불행하게도,이 매크로 (10 분 정도) 실행하는 데 시간이 많이 걸립니다 : 이것은 내가 작성한 매크로입니다. 나는 그것을 할 수있는 더 좋은 방법이있을 수 있다는 느낌이 들었습니다. 어떤 아이디어가 있습니까? 매크로를 어떻게 강화할 수 있습니까?
당신이 시도 할 수있는 첫 번째 일은 자동 계산을 루프 전에 끄고 그 후에 다시 켜기로 설정하는 것입니다. 이렇게하면 많은 시간을 절약 할 수 있습니다. – FDavidov
그런데 동일한 레코드 (예 : 바깥 쪽 루프의 각주기마다 안쪽 루프가 실행되는 평균 횟수)를 몇 번 (평균) 복사합니까? – FDavidov
'Variant Array' 기술을 사용하십시오. 너무 많은 예제가 있습니다. –