我有一个电子表格,我用它来编译一直在变化的文本。
在AD栏第4行(AD4)中,我放置了文本内容,它可以将数据向下移动1000到4000行。它每次都会改变,因此没有静态范围名称。我需要一个宏
当前版本正确找到底部单元格,但如果我第二次运行宏,使用新数据,它会继续尝试复制相同的范围。 (我使用了Formula Define.Name方法,命名单元格,然后选择了AB4:LastRow)但是数据是否始终是3160,而不是.......
Sub Last_row()
Cells(Application.Rows.Count, 30).End(xlUp).Select
' following lines of code are useless
Range("AB4:AD3160").Select
Range("AD3160").Activate
Selection.Copy
End Sub
答案 0 :(得分:3)
直接回答您的问题:
With Sheet1
.Range("AB4", .Cells(Rows.Count, "AD").End(xlUp)).Copy
End With
使用剪贴板复制到特定位置无:
With Sheet1
.Range("AB4", .Cells(Rows.Count, "AD").End(xlUp)).Copy Sheet2.[A1]
End With
复制和排除格式:
With Sheet1
With .Range("AB4", .Cells(Rows.Count, "AD").End(xlUp))
Sheet2.Cells(1, "A").Resize(.Rows.Count, .Columns.Count).Value = .Value
End With
End With
注意:将上面的所有工作表代号(sheet1,Sheet2)替换为您的实际工作表代号。
答案 1 :(得分:1)
您当前的代码会对感兴趣的范围进行硬编码
Range("AB4:AD3160").Select
此代码将定义从AB4开始到AD列中最后一个非空单元格的动态范围
然后您可以使用此范围(不选择)在其他地方更改值(请注意,您可能不需要实际复制 rng1
,可以将这些值转储到单独的范围直接没有复制和粘贴。
Sub Last_row()
Dim rng1 As Range
Set rng1 = Range([ab4], Cells(Rows.Count, 30).End(xlUp))
rng1.Copy
End Sub
更新:如何将动态尺寸范围从一张纸复制到另一张,而无需复制和粘贴:
Sub Last_row2()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Set ws1 = Sheets(1)
Set ws2 = Sheets(2)
Set rng1 = ws1.Range(ws1.[ab4], ws1.Cells(Rows.Count, 30).End(xlUp))
ws2.[a1].Resize(rng1.Rows.Count, rng1.Columns.Count).Value = rng1.Value
End Sub