我有一个宏,可以按一列过滤所有数据(250行),然后删除过滤后隐藏的数据。
下一步是使用ActiveSheet.ShowAllData取消过滤整个工作表。
奇怪的是,在我的机器上,对使用范围进行过滤后,似乎有200行(其中50行已被删除)。
但是,在另一台具有相同Excel版本(Office365)的计算机上,取消过滤并删除50行后,可见范围为1,048,576行(这几乎会使进一步的自动填充等混乱)
代码如下:
Dim lastRow As Long
Dim iCntr As Long
Range("A:AI" & Lines).AutoFilter Field:=32, Criteria1:= _
"2611"
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For iCntr = lastRow To 1 Step -1
If Rows(iCntr).Hidden = True Then Rows(iCntr).EntireRow.Delete
Next
ActiveSheet.ShowAllData
答案 0 :(得分:1)
我建议将所有需要删除的行收集到变量RowsToDelete
中,然后显示所有数据,然后一次删除所有行。不知道这是否最终能解决您的问题,但至少比删除每一行要快得多。
Option Explicit
Public Sub DeleteAllHiddenRows()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim LastRow As Long
LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
ws.Range("A:AI").AutoFilter Field:=32, Criteria1:="2611"
Dim RowsToDelete As Range
Dim iRow As Long
For iRow = 1 To LastRow
If ws.Rows(iRow).Hidden Then
If RowsToDelete Is Nothing Then
Set RowsToDelete = ws.Rows(iRow)
Else
Set RowsToDelete = Union(RowsToDelete, ws.Rows(iRow))
End If
End If
Next iRow
ws.ShowAllData
RowsToDelete.EntireRow.Delete
End Sub
答案 1 :(得分:0)
Sub clear_filter()
Dim sh As Worksheet
sh=activeworksheet
If sh.AutoFilterMode Then
On Error GoTo 1
sh.ShowAllData
sh.AutoFilterMode = False
End If
1
MsgBox "Data filters cleared", vbInformation
End Sub