从最后160行选择范围

时间:2016-07-27 03:02:40

标签: excel vba excel-vba

我有一个过滤表,我想从中复制最后160个条目。我过滤表的代码工作正常,但以下代码复制了整个160行。我需要从B列到S的最后160行。另外,我可以选择最后过滤的160行(之前使用特定条件过滤)而不是实际的最后160行吗?例如:最后160行可能包含从90到100的行号以及其他标准。

感谢您的帮助。我的代码如下:

Sub FilterRows()

Dim LastRow As Long, x As Long

LastRow = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row

x = 160

Range(LastRow - x + 1 & ":" & LastRow).Copy

End Sub

4 个答案:

答案 0 :(得分:0)

您必须调整要将输出复制到的位置,但请尝试以下操作,使用此部分代码Cells(1, 1)

Sub test()
   Sheets("Sheet1").Cells(2, 14).Resize(160, 17).Value = Cells(Cells(Rows.Count, _
                2).End(xlUp).Row - 159, 2).Resize(160, 17).Value
End Sub

答案 1 :(得分:0)

这将复制最后160个可见数据行的单元格B:S。

WindowsAppContext

答案 2 :(得分:0)

您可以用另一种方式思考。只需将所有过滤后的数据复制到新工作表,然后使用do while循环删除额外数据。

Sub LastRows()
Dim row As Integer

Sheets.Add after:=Sheets(Sheets.Count)
Sheets("Sheet1").Cells(1, 1).CurrentRegion.Copy ActiveSheet.Cells(1, 1) 

row = Range(Cells(1, 1), Cells(1, 1).End(xlDown)).Rows.Count

If row > 161 Then 'including the title
    Rows("2:" & (row - 160)).Delete
End If
End Sub

请更改" Sheet1"到您的数据表的名称

答案 3 :(得分:0)

你可以使用这样的功能:

Function FilteredRows(nRowsToCopy As Long, rng As Range, firstCol As String, lastCol As String) As Range
    Dim firstRow As Long: firstRow = 2

    With rng
        With .Offset(1, .Parent.UsedRange.Columns.Count).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible).Offset(, .Parent.UsedRange.Columns.Count)
            .FormulaR1C1 = "=max(R1C:R[-1]C)+1"
            If WorksheetFunction.Max(.Cells) > nRowsToCopy Then firstRow = .Find(what:=WorksheetFunction.Max(.Cells) - nRowsToCopy + 1, lookat:=xlWhole, LookIn:=xlValues).Row
            .Clear
        End With
        Set FilteredRows = Intersect(.SpecialCells(xlCellTypeVisible), .Parent.Columns(firstCol & ":" & lastCol), .Parent.Rows(firstRow).Resize(.Rows(.Rows.Count).Row - firstRow + 1))
    End With
End Function

将在您的主要代码中被利用,如下所示:

FilteredRows(nRowsToCopy, dataRng, "B", "S").Copy

,其中

  • nRowsToCopy是要复制的最后过滤行的(最大)数量
  • datarng是包含所有数据的范围(包含标题)
  • "B""S"是要复制的第一个和最后一列