复制单元格范围并粘贴到第一个空行更有效的代码?高强

时间:2013-07-31 13:42:55

标签: excel excel-vba vba

我有一个Macro,它从“New Search”中选择一个单元格并将范围粘贴到“过去搜索”中的第一个打开的单元格我认为我的代码非常无效。有没有人对如何改进这个有任何想法?

Sub Macro5()
Range("A3:J3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Past Searches").Select
Range("A1").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
Worksheets("New Searches").Activate
Application.CutCopyMode = False
End Sub

3 个答案:

答案 0 :(得分:3)

首先,您不必在要操作的单元格/工作表上使用.Select或.Activate,只需直接引用它们即可。这确实会减慢您的代码速度。

.Copy方法可以使用Destination参数,因此您不必在其他地方使用.Paste。

此外,.End属性不是很可靠。最好使用UsedRange。

你只能在一行中做到这一点。

Worksheets("New Search").Range("A3:J3").Copy Destination:=Worksheets("Past Searches").UsedRange.Columns(1).Offset(1, 0)

答案 1 :(得分:0)

Fabio感谢你指出了我正确的方向,我不可能把这个烂摊子变成简洁的代码。

numofrows = ActiveSheet.UsedRange.Rows.Count`

Worksheets("New Searches").Range("A3", "J" + CStr(numofrows)).Copy Destination:=Worksheets("Past Searches").Range("A1").End(xlDown).Offset(1, 0)

这最终做了我需要做的事。

答案 2 :(得分:0)

你也可以这样做,所以你不需要numofrows?

Worksheets("New Searches").Range(Range("A3:J3"), Range("A3:J3").End(xlDown)).Copy Destination:= _
Worksheets("Past Searches").Range("A1").End(xlDown)