Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 保留前11行的VBA代码_Excel_Vba - Fatal编程技术网

Excel 保留前11行的VBA代码

Excel 保留前11行的VBA代码,excel,vba,Excel,Vba,我想在每次过滤数据并删除剩余的杂波后保留前11行(前10行加上标题)。有人能帮我吗 sub macro() ....... ....... ........ LastRow = Cells(Rows.Count, 1).End(xlUp).Row Worksheets("Top10").Range("B1").AutoFilter field:=2, Criteria1:="fiter1", VisibleDropDown:=True Range(

我想在每次过滤数据并删除剩余的杂波后保留前11行(前10行加上标题)。有人能帮我吗

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)


提前感谢

我很难将这段代码概念化,因为每次您似乎都在覆盖现有数据。很可能,我很难想象你的数据会是什么样子,这样就可以了

这就是说,如果我从字面上理解你的代码,并假设它按照你的预期运行,但你不想硬编码过滤器的每个迭代,那么对于所有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

您是否在Windows上使用Excel作为可以使用SQL来解决此问题的工具?非常感谢HAMBONE。您的代码似乎对我有用。我会检查一下……但在我的代码过滤器中,1到28意味着它可能是人名或城市名等……在这种情况下,该怎么办???我想我可以把所有的名字都分配给那些过滤器ryt???…比如filter1=personA filter2=personB等等…需要你的帮助…再次感谢你,你回复我很快,我想最简单的方法可能是在另一个工作表中列出所有这些。然后,您可以在工作表中定义筛选条件的单元格中循环,而不是循环1-28。这有意义吗?