使用偏移时如何加快复制粘贴值

时间:2015-04-11 07:27:25

标签: excel excel-vba vba

我想让“ copy-amp; paste-values-on-a-row-every-time ”这个基本功能尽快运行,因为宏重复计算数十万时间。在搜索这个论坛多年后,我找不到确切的答案。

目前,我正在复制固定范围内的输出数字,并在工作表的其他位置复制每个新结果集的新行上的值。

以下是执行此操作的代码部分:

Row = Row +1
Range("g15:ax15").copy
Range("ea18").select
ActiveCell.Offset(Row,0).select
Selection.PasteSpecial Paste:=xlPasteValues

现在,根据我在此论坛上发现的内容,我可以使用Range(destination).value = Range(results).value完全替换复制/粘贴功能,以加快速度。但是,如果目标行每次需要偏移1,我无法弄清楚如何执行此操作。此外,我已经读过,人们甚至可以取消“选择”以进一步加快速度!怎么样?

3 个答案:

答案 0 :(得分:1)

有很多选择:

//This uses the `Destination` key word
Sub CopyAndPaste()
    Dim i as long
    For i = 1 to 10
        Range("g15:ax15").Copy Destination:=Range("ea18").Offset(i, 0)
    next i
End Sub

//If you need `PasteSpecial` then you cannot use `Destination` hence this version
Sub CopyAndPaste()
    Dim i as long
    For i = 1 to 10
        Range("g15:ax15").Copy
        Range("ea18").Offset(i, 0).PasteSpecial Paste:=xlPasteValues
    next i
End Sub

有时首先将值读入数组然后再写回电子表格更快。这是一个例子:

Sub CopyAndPaste()
    Dim i As Long, numbers As Variant, rw As Long

    numbers = Range("g15:ax15")
    rw = 18

    For i = 1 To 10
        rw = rw + 1
        Range(Cells(rw, 131), Cells(rw, 131 + UBound(numbers, 2) - 1)) = numbers
    Next i    
 End Sub  

答案 1 :(得分:1)

你可以不用复制就这样做(使用变体数组,因为你只复制值,而不是格式)

X = Range("g15:ax15").Value2
[ea18].Offset(1, 0).Resize(UBound(X, 1), UBound(X, 2)).Value2 = X

或使用您的变量偏移量

Dim lngCnt As Long
lngCnt = lngCnt + 1
X = Range("g15:ax15").Value2
[ea18].Offset(lngCnt, 0).Resize(UBound(X, 1), UBound(X, 2)).Value2 = X

答案 2 :(得分:0)

Row = Row +1
 Range("g15:ax15").copy
 Range("ea18").Offset(Row,0).PasteSpecial Paste:=xlPasteValues

选择是从记录中继承的一种或多或少无用的方法。