如何解决VBA-代码优化,可多次复制特定范围的列
我有一个excel计算,可以在10列中完成一次迭代(+1列用于空间,每组11个列)。我的意图是使用VBA多次复制此11列范围(最好是350或更多次)。每次复制/粘贴范围时,计算的迭代都会引用先前的设置以产生“级联”效果。
我拼凑了一些VBA代码,可以完成此任务,但是处理起来非常慢,而且很难确定计算是否按照迭代方案的较大端工作。我添加了一个状态栏来跟踪进度,并且我注意到该操作在经过约100次迭代后逐渐停止。我目前将计数设置为100次迭代,因为这似乎很麻烦。
在询问此问题之前,我一直在这里寻求帮助,并发现了 Application.ScreenUpdating = False 技巧,但这似乎无法解决问题。
如何优化当前拥有的商品?有没有更好的方法可以做到这一点?
Sub CascadeCopy2()
Dim i As Integer,x As Integer
Dim count As Integer
Application.ScreenUpdating = False
count = 100
For i = 1 To count
With Sheets("Calc").Range("V3:AF250").Offset(0,x)
.Copy
.Offset(0,11).PasteSpecial
Application.CutCopyMode = False
x = x + 11
End With
Application.StatusBar = "Progress: " & i & " of " & count & ":" & Format(i / count,"0%")
Next i
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub
解决方法
关闭Application.ScreenUpdating
是一个好的开始。
在循环中复制粘贴大量数据可能会变得非常缓慢,因为复制粘贴需要使用剪贴板,这效率不高。
尝试使用以下方式直接访问您的范围:
Sheets("Calc").Range("V3:AF250").Offset(0,x).value = Sheets("Calc").Range("V3:AF250").Offset(0,11).value
然后,您也可以使用相同的原理来复制具有相同模板的格式,颜色或字体大小等。例如:
Sheets("Calc").Range("V3:AF250").Offset(0,x).Interior.ColorIndex = Sheets("Calc").Range("V3:AF250").Offset(0,11).Interior.ColorIndex
您可以轻松地使其适应您的需求。
,要在工作表中重复复制范围,您需要执行一个for循环。您可以使用equals method
,但必须执行两个操作才能复制公式,请参见下文。
Dim x As Long
x = 1
For i = 1 To 299 'the number of times you want to copy,change as needed
With Sheets("Calc").Cells(1,x + 32).Resize(250,32)
.Value = Sheets("Calc").Cells(1,x).Resize(250,32).Value
.Formula = Sheets("Calc").Cells(1,32).Formula
End With
x = x + 32
Next i
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。