需要一个“简单”的Excelmacros来查找列中的底部单元格,创build一个范围并复制它

我有一个电子表格,我正在使用它来编译一直在改变的文本。

在AD栏第4行(AD4)中,我放置了文本的内容,它可以使数据向下1000到4000行。 它每次都会改变,所以没有静态范围名称。 我需要一个macros

  • find该列中的最后一段数据,
  • 然后自动“拖动一个盒子”,从那个地方向左两列(AB4)
  • 并复制它…(3000行的文本将是AB4:AD3004)(macros停在那里,文本被复制高亮显示)

当前版本正确地查找底部单元格,但是如果我第二次运行macros,使用新数据,它会不断尝试复制相同的范围。 (我使用公式Define.Name方法来命名单元格,然后selectAB4:LastRow),但总是3160是否数据转到行4000或…

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 

直接回答你的问题:

 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 

注意:将上面的所有工作表代号(工作表1,工作表2)replace为实际的工作表代号。

您当前的代码使用Range("AB4:AD3160").Select对感兴趣的范围进行硬编码

此代码将定义从AB4开始到AD列中最后一个非空单元格的dynamic范围

然后,您可以使用此范围(不select)在别处更改值(请注意,您可能不需要实际复制 rng1 ,可以直接将这些值转储到单独的范围,而无需复制和粘贴。

 Sub Last_row() Dim rng1 As Range Set rng1 = Range([ab4], Cells(Rows.Count, 30).End(xlUp)) rng1.Copy End Sub 

更新:如何将一个dynamic大小的范围从一个表复制到另一个没有复制和粘贴的示例:

 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