【发布时间】:2014-03-08 21:39:15
【问题描述】:
我想这很简单,但由于某种原因,它似乎对我不起作用:(
我有以下代码,它根据我指定的条件自动过滤数据:
Dim lastrow As Long
lastrow = Sheet2.Cells(Sheet2.Rows.Count, "A").End(xlUp).Row
With Sheet2
.AutoFilterMode = False
With .Range("A1:AF" & lastrow)
.AutoFilter
.AutoFilter Field:=7, Criteria1:="Yes", Operator:=xlFilterValues
End With
我现在要做的是删除所有不符合条件的未过滤(隐藏)行。
到目前为止我尝试过:
Sub RemoveHiddenRows
Dim oRow As Object
For Each oRow In Sheets("Sheet2").Rows
If oRow.Hidden Then oRow.Delete
Next
End Sub
但是此代码的问题在于,它只会删除每隔一行的连续隐藏行,因为即使删除了一行并且所有较低的行都向上移动了,每一行都会增加所考虑的行。
如果可能的话,我更喜欢没有循环的东西,有点像.SpecialCells(xlCellTypeVisible).EntireRow.Delete的相反@
所有帮助将不胜感激。
【问题讨论】:
-
为什么不把条件改为
Criteria1:="<>Yes",然后.SpecialCells(xlCellTypeVisible).EntireRow.Delete? -
@simoco 在这种情况下它会起作用,但在其他情况下,我会根据 3 或 4 个多个条件过滤数据,有时每个条件都携带超过 1 个值。所以我有点想摆脱未过滤的数据,而不是试图颠倒所有标准并删除可见单元格。有什么建议吗?
-
只需遍历行并检查是否
.Hidden = True,然后删除那些。如果您不想要删除循环,请对隐藏行执行Union循环,然后一次性删除它们。