통합 문서간에 값을 복사하는 코드를 만들었습니다. 문제는 너무 느립니다 (60 개의 파일로 복사하는 데 30 분 정도 소요됩니다). 각 셀마다 값을 설정했기 때문에 생각합니다.통합 문서간에 값 복사
For Each cl In rg
For c = 0 To 4
wb.ActiveSheet.Cells(i + c, 2 + n).Value = cl.Offset(r - 2, c).Value
Next
n = n + 1
Next
내가하는 이유는 : 60 행의 셀 (각 셀에 수식이 있음) (각 행에 550 개의 셀이 있음)입니다. 첫 번째 행의 값 (결과가 아닌 수식)은 첫 번째 Excel 통합 문서 (60 개 파일 있음)에 복사해야하며 두 번째 행은 두 번째 통합 문서 등으로 복사해야합니다.이 행은 데이터가 열로 채워지는 표 5x110에 복사됩니다 행의 5 셀 - 첫 번째 열 등).
최적화하는 방법? (복사를 시도했습니다 - 과거 값 - 응답하지 않습니다). 저는 이미 보이지 않는 모드에서 Excel 응용 프로그램을 열었습니다. 나는 아직 (를 열지 않고) 폐쇄 엑셀 파일에 쓰기를 시도하지 않은 (그러나 나는 그것이 훨씬 더 빨리 작동 될 수없는 것이라고 생각)
Sub CopyM()
Dim rg As Range, r As Long, c As Long, wb As Excel.Workbook, col As Long, i As Long, j(1 To 60) As String, k As Long
Dim FileName As String
Dim app As New Excel.Application
Dim FolderPath As String, p As String, cl As Range, n As Long
app.Visible = False
i = 2
For k = 1 To 60
If k < 51 Then
j(k) = k
Else
j(k) = ("d" & (k - 50))
End If
Next k
Set rg = Range("K2")
Application.ScreenUpdating = False
For col = 16 To 560 Step 5
Set rg = Union(rg, Cells(2, col))
Next col
p = ActiveWorkbook.Path
FolderPath = (p & "\")
FileName = (FolderPath & j(1) & ".xlsm")
n = 0
For r = 2 To 61
FileName = (FolderPath & j(r - 1) & ".xlsm")
Set wb = app.Workbooks.Open(FileName)
n = 0
For Each cl In rg
For c = 0 To 4
wb.ActiveSheet.Cells(i + c, 2 + n).Value = cl.Offset(r - 2, c).Value
Next
n = n + 1
Next
wb.Close savechanges:=True
app.Quit
Application.ScreenUpdating = True
Cells(1, 1).Value = (r - 1) & "/60"
Application.ScreenUpdating = False
Next
Set app = Nothing
Application.ScreenUpdating = True
Cells(1, 1).Value = ""
MsgBox "Finished"
End Sub
기본 원칙 : 변형 배열 ('ArrayVariable = RangeVariable.Value'), 다시 배열을 복사 (_fast_되는 배열을 통해 반복) 배열을 조작 할 수있는 범위를 복사 범위로. ('RangeVariable.Value = ArrayVariable') [this] (http://stackoverflow.com/a/27349703/445425) 또는 [this] (http://stackoverflow.com/a/7874472/445425) 또는 [this ] (http://stackoverflow.com/a/7368257/445425). 나는 더 가까이서 적절한 답을 게시 할 것입니다. –
모든 셀을 복사하는 대신에'Range.Copy' 메서드를 사용해 보셨나요? 나는 각각의 루프'For Each cl In Rg'을 언급하고 있습니다. 나중에 범위를 변형에 붙여 넣을 수 있습니다. 그것은'var = range.value'와 같을 것입니다 –
Chris 님, 배열 사용에 대해 생각해 봤습니다. 아직 시도하지 않았습니다. – Samuel