ma_*_*YYC 8 excel optimization vba excel-vba
很简单,我想知道将单元格值从一个工作表复制到另一个工作表的最快方法是什么.
通常,我将按列和/或行循环遍历单元格,并使用如下行:
Worksheets("Sheet1").Cells(i,j).Value = Worksheets("Sheet1").Cells(y,z).Value
Run Code Online (Sandbox Code Playgroud)
在其他情况下,我的范围不是连续的行/列(例如,我想避免覆盖已经包含数据的单元格),我要么在循环内部有一个条件,要么我将用行和列填充一个数组我希望循环的数字,然后遍历数组元素.例如:
Worksheets("Sheet1").Cells(row1(i),col1(j)).Value = Worksheets("Sheet2").Cells(row2(y),col2(z)).Value
Run Code Online (Sandbox Code Playgroud)
难道是用快我想复制的细胞和目标细胞定义范围,然后做一个Range.Copy和Range.Paste操作?是否可以使用数组定义范围而无需循环遍历它?或者无论如何循环数组以定义范围然后复制粘贴范围而不是通过循环等同单元格值会更快吗?
我觉得可能根本不可能复制和粘贴这样的范围(即它们需要通过矩形阵列连续的单元格并粘贴到相同大小的矩形阵列中).话虽这么说,我认为可以将两个范围的元素等同,而不会遍历每个单元格并使值等于.
对于矩形块:
Sub qwerty()
Dim r1 As Range, r2 As Range
Set r1 = Sheets("Sheet1").Range("A1:Z1000")
Set r2 = Sheets("Sheet2").Range("A1")
r1.Copy r2
End Sub
Run Code Online (Sandbox Code Playgroud)
非常快
对于活动表上的非连续范围,我会使用一个循环:
Sub qwerty2()
Dim r1 As Range, r2 As Range
For Each r1 In Selection
r1.Copy Sheets("Sheet2").Range(r1.Address)
Next r1
End Sub
Run Code Online (Sandbox Code Playgroud)
编辑#1:
范围到范围方法甚至不需要中间数组:
Sub ytrewq()
Dim r1 As Range, r2 As Range
Set r1 = Sheets("Sheet1").Range("A1:Z1000")
Set r2 = Sheets("Sheet2").Range("A1:Z1000")
r2 = r1
End Sub
Run Code Online (Sandbox Code Playgroud)
这真的是一样的:
ary=r1.Value
r2.value=ary
Run Code Online (Sandbox Code Playgroud)
除了ary隐含的.