Excel查找范围的结尾,然后选择范围并复制

Excel查找范围的结尾,然后选择范围并复制,excel,copy,range,vba,Excel,Copy,Range,Vba,这一点可能有人问过,也可能没有人问过 我试图使用宏将一系列单元格从一个工作表复制到另一个工作表。我遇到的问题是,每次运行宏时,我要复制的范围都会发生很大的变化 例如,我希望在第一次运行时复制范围(“A2:P64”),然后,当我再次运行数据时,范围的起点仍然是A2,但范围的终点可能是P25或p90000。它始终是P列和(x变量)行 我尝试过这样的事情: Dim past As Worksheet Dim countHist As String Dim view As Worksheet Dim c

这一点可能有人问过,也可能没有人问过

我试图使用宏将一系列单元格从一个工作表复制到另一个工作表。我遇到的问题是,每次运行宏时,我要复制的范围都会发生很大的变化

例如,我希望在第一次运行时复制范围(“A2:P64”),然后,当我再次运行数据时,范围的起点仍然是A2,但范围的终点可能是P25或p90000。它始终是P列和(x变量)行

我尝试过这样的事情:

Dim past As Worksheet
Dim countHist As String
Dim view As Worksheet
Dim countView As String

Set view = ThisWorkbook.Worksheets("BlueSteel Errors")
Set past = ThisWorkbook.Worksheets("Historical")

countView = view.Cells(Rows.Count, "A").End(xlUp).Row
countHist = past.Cells(Rows.Count, "A").End(xlUp).Row
MsgBox ("P" & countView) ' This currently gives the count of 53, so output is P53

view.Range("A2:P & countView").Select   ' THIS IS THE PROBLEM LINE.. should look
'should resemble view.Range("A2:P53").Select
'EVERYTHING ELSE APPEARS TO WORK

Selection.Copy
past.Select
Range("A" & countHist).Select
ActiveSheet.Paste
我找不到一种方法来确定文本存在的最后一行,然后将该数字附加到范围字段的末尾,这样我就可以选择并附加到其他工作表中。。我只需要A2-Px中的数据,而不是P之外的所有多余字段。也许我需要复制然后删除它。

您需要

End(xlUp)
功能

所以更新你的问题行


请。。。请…请。。。请…请。。。请…请。。。请…请。。。请…请。。。请…请。。。请…请。。。请…请。。。请不要使用
。选择

您的代码中还有几个错误

  • 您已将
    countHist
    countView
    声明为
    String
    。它应该是
    长的
  • 引号内的任何内容都是字符串。所以
    “A2:P&countView”
    是一个字符串。您需要
    “A2:P”和countView
  • 您需要将
    1
    添加到目标工作表的最后一行,以便不覆盖最后一行
  • 试试这个

    Sub Sample()
        Dim past As Worksheet, view As Worksheet
        Dim countHist As Long, countView As Long
    
        Set view = ThisWorkbook.Worksheets("BlueSteel Errors")
        Set past = ThisWorkbook.Worksheets("Historical")
    
        countView = view.Cells(view.Rows.Count, "P").End(xlUp).Row
        countHist = past.Cells(past.Rows.Count, "A").End(xlUp).Row + 1
    
        '~~> Do a direct copy paste instead of selecting first
        view.Range("A2:P" & countView).Copy past.Range("A" & countHist)
    End Sub
    

    您可能需要使用
    .Find
    查找最后一行,因为并非所有单元格都已填充到特定行中。有关查找最后一行的详细信息

    应该是这样的
    view.Range(“A2:p”和countView)。选择
    。谢谢。。这与我的原始代码非常接近,是的,Select特性有它的缺点。。谢谢你发现了我的“疏忽…”:D“这就是我每次编写代码不超过一两个小时的原因。”。。代码开始看起来一样,而且总是正确的。即使这是错误的。
    view.Range("A2:" & view.Range("P" & Cells.Rows.Count).End(xlUp).Address).Select
    
    Sub Sample()
        Dim past As Worksheet, view As Worksheet
        Dim countHist As Long, countView As Long
    
        Set view = ThisWorkbook.Worksheets("BlueSteel Errors")
        Set past = ThisWorkbook.Worksheets("Historical")
    
        countView = view.Cells(view.Rows.Count, "P").End(xlUp).Row
        countHist = past.Cells(past.Rows.Count, "A").End(xlUp).Row + 1
    
        '~~> Do a direct copy paste instead of selecting first
        view.Range("A2:P" & countView).Copy past.Range("A" & countHist)
    End Sub