[英]VBA copy & paste with dynamic range
我是VBA的新手,却卡在某个地方。 我必须将A列的最后一行复制到H列,并将其粘贴到I列的最后一行。columnns的最后一行将始终更改。
例如; 我的数据在A2:H2中,而I5是数据的最后一个单元格。
我的代码应该是复制A2:H2并粘贴到A3:H5。 第二次运行宏(将新数据添加到相应的列之后),它应该被复制A6:H6并将其粘贴直到I列的最后一行。
我写了两个不能满足我需求的代码。
第一个代码是 ;
Sub OrderList1()
Range("a65536").End(xlUp).Resize(1, 8).Copy _
(Cells(Cells(Rows.Count, 9).End(xlUp).Row, 1))
End Sub
此代码跳过A3:H4,仅粘贴到A5:H5
第二个代码是 ;
Sub OrderList2()
Range("A2:H2").Copy Range(Cells(2, 8), _
Cells(Cells(Rows.Count, 9).End(xlUp).Row, 1))
End Sub
它会复制A2:H3并粘贴到A5:H5,但是当我添加新数据时,它并不会从A5:H5开始粘贴。 它从A2:H2开始并覆盖旧数据。 我可以看到我必须更改的内容,范围应该像第一个代码中那样是动态范围,但是我无法编写代码。
我将非常感谢您的帮助。
您可能希望以此为起点:
Dim columnI As Range
Set columnI = Range("I:I")
Dim columnA As Range
Set columnA = Range("A:A")
' find first row for which cell in column A is empty
Dim c As Range
Dim i As Long
i = 1
For Each c In columnA.Cells
If c.Value2 = "" Then Exit For
i = i + 1
Next c
' ok, we've found it, now we can refer to range from columns A to H of the previous row
' to a variable (in the previous row, column A has not been empty, so it's the row we want
' to copy)
Dim lastNonEmptyRow As Range
Set lastNonEmptyRow = Range(Cells(i - 1, 1), Cells(i - 1, 8))
' and now copy this range to all further lines, as long as columnI is not empty
Do While columnI(i) <> ""
lastNonEmptyRow.Copy Range(Cells(i, 1), Cells(i, 8))
i = i + 1
Loop
尝试使用此功能以实现将来的功能,或者至少对我有用。如果需要帮助,请询问:)
Option Explicit
Sub lastrow()
Dim wsS1 As Worksheet 'Sheet1
Dim lastrow As Long
Dim lastrow2 As Long
Set wsS1 = Sheets("Sheet1")
With wsS1
'Last row in A
lastrow = Range("A" & Rows.Count).End(xlUp).Row
'Last Row in I
lastrow2 = Range("I" & Rows.Count).End(xlUp).Row
'Cut in A:H and paste into last row on I
wsS1.Range("A2:H" & lastrow).Cut wsS1.Range("I" & lastrow2)
End With
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.