2016-12-29 53 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