我想让“ 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,我无法弄清楚如何执行此操作。此外,我已经读过,人们甚至可以取消“选择”以进一步加快速度!怎么样?
答案 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
选择是从记录中继承的一种或多或少无用的方法。