我有一个具有以下内容的Excel文件:
我现在拥有的宏可以解决问题,但是复制的行越多,速度就越慢。我正在寻找一种方法,以使其尽可能干净和快速。 唯一需要做的是:从第二个工作表的数据范围复制到第三个工作表的第一个空闲行,生成新数据,复制数据,将数据粘贴到第一个空闲行,...。
我现在拥有的宏用于10K模拟,但是如果我尝试一次运行生成100K以上的数据集,则它的速度会大大降低。
感谢帮助/建议/提示。请记住,我是这个菜鸟:(
Sub Plus10000()
'
' Plus10000 Macro
'
Application.ScreenUpdating = False
Let x = 0
Do While x < 10000
Range("SourceData").Copy
Sheets("Data").Range("B" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
x = x + 1
Loop
Application.ScreenUpdating = True
'
End Sub
答案 0 :(得分:0)
您逐行复制和粘贴,这非常慢,因为每个粘贴操作都需要花费大量时间。但是您可以多次复制并粘贴一个动作。
Sub Plus10000()
'
' Plus10000 Macro
'
Application.ScreenUpdating = False
Range("SourceData").Copy
Sheets("Data").Range("B1:B10000").PasteSpecial xlPasteValues
Application.ScreenUpdating = True
'
End Sub
这会将您的来源范围从第1行粘贴到10000。
答案 1 :(得分:0)
要做的第一件事就是避免使用CLIPBOARD!
如果程序运行1个小时,并且您同时要执行其他操作,则当用户或其他程序手动更改剪贴板时,Excel宏肯定会崩溃。
解决您问题的唯一方法是编写一个完整的宏来生成数据,而无需使用中间表,不使用Cell的公式以及不使用剪贴板!
答案 2 :(得分:0)
您可以尝试在每次迭代时都不写工作表单元格:
Sub Plus10000()
Const nData As Long = 10000 ' set the number of calculations to be done
ReDim data(1 To nData, 1 To Range("SourceData").Columns.Count) As Variant ' size you data array to mathc the number of calculations and "source" range
Dim i As Long, j As Long
Application.ScreenUpdating = False
Do While i < nData
i = i + 1
Calculate ' have Excel make a new calculation of your workbook formulas
For j = 1 To UBound(data, 2) ' fill your data current row with "Source" range current values
data(i, j) = Range("SourceData").Cells(1, j)
Next
Loop
Application.Calculation = xlCalculationManual ' prevent formula recalculation at subsequent "Data" sheet writing
Sheets("Data").Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Resize(UBound(data), UBound(data, 2)).Value = data ' fill "data" sheet with data array values in one shot
Application.Calculation = xlCalculationAutomatic ' set Excel automatic calculation back on
Application.ScreenUpdating = True
End Sub