我有一张大型Excel表格。我对将数据从一个单元格移动到另一个单元格感兴趣。我研究了如何优化复制/粘贴功能以尽可能少的时间,并发现:
Sheet1.Range("A1").Value = Sheet1.Range("B1").Value
或
Sheet1.Range("A1").Copy Destination:=Sheet1.Range("B1")
比以下更快:
Sheet1.Range("A1").Copy
Sheet1.Range("A1").PasteSpecial xlPasteValues
Application.CutCopyMode=False'Clear Clipboard
现在,我需要使用以下选项制作副本:
Range("A1").Select
Selection.Copy
Range("B1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
是否可以将其转换为类似于前面提到的代码?
另外,关于循环。是否通常更快地避免它们(如果可能)或编译器如何优化?让我举个例子让你不要误解我:
假设我想复制来自" A1:A200"到" B1:B200"。那么哪种方法会更好?
Dim counter As Integer
For counter = 1 To 200
Sheet1.Range("A" & CStr(counter)) = Sheet1.Range("B" & CStr(counter))
End counter
或者仅仅使用代码更好:
Sheet1.Range("A1:A200").Copy Destination:=Sheet1.Range("B1:200")
这些例子非常简单,但如果有人能帮我理解所应用的原则,那对我来说就很有价值!
答案 0 :(得分:0)
首先,请勿使用Select
和Selection
。这真的会减慢您的代码速度。特别是在循环中。
复制值的最快方法是执行此操作Range("B1:B99").Value=Range("A1:A99").Value
此外,您应该停用Screenupdating,特别是如果公式引用粘贴区域,请关闭工作表的自动计算:Application.ScreenUpdating=False
Application.Calculation=xlCalculationManual
总的来说它应该看起来像这样:
Sub CopyFast ()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
ActiveSheet.Range("B1:B99") = ActiveSheet.Range("A1:A99")
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
但是,在复制大量值时,这一点非常重要,例如in循环而不是本例中的简单复制任务。