请尝试下一个代码。它应该非常快,使用数组并且只在内存中工作。基本上,它复制了讨论中的范围,它是连续的并粘贴反向数组:
Sub testCopyReversedRange()
Dim x As Workbook, y As Workbook, sh As Worksheet, ws As Worksheet
Dim arr As Variant, arrFin As Variant, i As Long, k As Long
Set y = ActiveWorkbook: Set sh = y.Sheets("Sheet1")
Set x = Workbooks.Open("C:\x\xx\xx\Folder\File.xls")
Set ws = x.Sheets("Sheet1")
arr = sh.Range("C8:G8").Value
ReDim arrFin(UBound(arr, 1) To UBound(arr, 2), 1 To 1)
For i = UBound(arr, 2) To 1 Step -1 'reverse the array order and transpose it
k = k + 1
arrFin(k, 1) = arr(1, i)
Next i
ws.Range("G8").Resize(UBound(arrFin, 1), UBound(arrFin, 2)).Value = arrFin
End Sub
已编辑:
还有一个更紧凑的版本:
Sub testCopyReversedRangeBis()
Dim x As Workbook, y As Workbook, sh As Worksheet, ws As Worksheet
Dim arr As Variant, arrFin As Variant, I As Long, k As Long, vals As Variant
Set y = ActiveWorkbook: Set sh = y.Sheets("Sheet1")
Set x = Workbooks.Open("C:\x\xx\xx\Folder\File.xls")
Set ws = x.Sheets("Sheet1")
arr = sh.Range("C8:G8").Value
arrFin = Split(StrReverse(Join(Application.Index(arr, 1, 0), ",")), ",")
ws.Range("G8").Resize(UBound(arrFin) + 1, 1).Value = WorksheetFunction.Transpose(arrFin)
End Sub