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

时间:2012-03-28 00:18:57

标签: excel vba

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

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

  • 在该列中找到最后一段数据,
  • 然后从该位置自动“拖动一个方框”两列向左(AB4)
  • 并复制它......(3000行文本将是AB4:AD3004)(宏停在那里,文本被高亮复制)

当前版本正确找到底部单元格,但如果我第二次运行宏,使用新数据,它会继续尝试复制相同的范围。 (我使用了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

2 个答案:

答案 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