我有一个过滤表,我想从中复制最后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
答案 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"
是要复制的第一个和最后一列