在Excel VBA中复制大量值的最快方法

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.CopyRange.Paste操作?是否可以使用数组定义范围而无需循环遍历它?或者无论如何循环数组以定义范围然后复制粘贴范围而不是通过循环等同单元格值会更快吗?

我觉得可能根本不可能复制和粘贴这样的范围(即它们需要通过矩形阵列连续的单元格并粘贴到相同大小的矩形阵列中).话虽这么说,我认为可以将两个范围的元素等同,而不会遍历每个单元格并使值等于.

Gar*_*ent 8

对于矩形块:

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隐含的.

  • @BruceWayne设置范围等于*(假设范围是同构的)*可能会更快,但格式化不会过来..........但也许没关系 (3认同)
  • 复制/粘贴比设置范围相等更快吗? (2认同)