2016-12-29 28 views
0

我想在每次过滤数据并删除剩余的混乱之后保留top11行(top10行加标题)。谁能帮我????保留VBA代码TOP 11行

sub macro() 
....... 
....... 
........ 
     LastRow = Cells(Rows.Count, 1).End(xlUp).Row 
     Worksheets("Top10").Range("B1").AutoFilter field:=2, Criteria1:="fiter1", VisibleDropDown:=True 
     Range("A2:J" & LastRow).Sort Key1:=Range("J2"), Order1:=xlAscending 
     Range("A12:J" & LastRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
     Worksheets("Top10_WO").Range("B1").AutoFilter field:=2, Criteria1:="fiter2", VisibleDropDown:=True 
     Range("A2:J" & LastRow).Sort Key1:=Range("J2"), Order1:=xlAscending 
     Range("A22:J" & LastRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
     Worksheets("Top10_WO").Range("B1").AutoFilter field:=2, Criteria1:="fiter3", VisibleDropDown:=True 
     Range("A2:J" & LastRow).Sort Key1:=Range("J2"), Order1:=xlAscending 
     Range("A32:J" & LastRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
..... 
.... 
....(upto filter28) 

目前我有这样的代码,但这并不灵活,因为我的过滤数据范围是动态的。所以我想要一个保留前10行和头的代码,并删除每个过滤数据的剩余所有行(过滤器1到过滤器28)。

在此先感谢

+0

您是否在Windows上使用Excel,因为您可以使用SQL来解决此问题? – Parfait

回答

0

这是我很难概念化这个代码的工作,因为它似乎每次要覆盖现有的数据。很可能,我很难想象你的数据是什么样子的,这样才能工作。这就是说,如果我把你的代码放在面值上,并假设它按照你期望的那样工作,但你不想硬编码过滤器的每一次迭代,那么这个代码将会是你的一个有效替代品对于所有28个过滤器来说都是如此。

Sub macro() 

    Dim ws, sorts As Worksheet 
    Dim LastRow, filter, nextRow As Long 
    Dim sortRange As Range 

    Set ws = Worksheets("Top10_WO") 
    Set sorts = New Worksheet 
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row 
    nextRow = 12 

    For filter = 1 To 28 

    ws.Range("B1").AutoFilter field:=2, Criteria1:="fiter" & filter, VisibleDropDown:=True 
    sortRange.Sort Key1:=Range("J2"), Order1:=xlAscending 
    Range("A" & nextRow & ":J" & LastRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete 

    nextRow = nextRow + 10 

    Next filter 

End Sub 
+0

非常感谢你HAMBONE.It好像你的代码炒我的。我只是检查它...但在我的代码filter1过滤器28意味着它可能是人或城市的名称左右.....在那种情况下,该怎么办?我想我可以将所有名称都分配给那些筛选器ryt ?? .....即filter1 = personA filter2 = personB等等....需要你的帮助...再次非常感谢你,所以你很快回复了我 –

+0

我认为最简单的方法可能是列出所有这些在另一个工作表中。然后,而不是循环1 - 28,您可以遍历工作表中定义过滤条件的单元格。这有意义吗? – Hambone