使用vba(自动筛选)删除excel中符合特定条件的行
我正在尝试使用自动筛选根据条件删除行。。因为我正在处理的工作表中有很多数据。如下图所示,我在这个网站上找到了一个我编辑过的代码,以符合我需要的标准。代码运行时不会出错,但不会删除任何行!任何帮助都将不胜感激!我想在B列中找到标准使用vba(自动筛选)删除excel中符合特定条件的行,vba,autofilter,Vba,Autofilter,我正在尝试使用自动筛选根据条件删除行。。因为我正在处理的工作表中有很多数据。如下图所示,我在这个网站上找到了一个我编辑过的代码,以符合我需要的标准。代码运行时不会出错,但不会删除任何行!任何帮助都将不胜感激!我想在B列中找到标准 Private Sub CommandButton2_Click() Dim rngTable As Range Dim ws As Worksheet Dim StartCell As Range Const ColumntoFilter1 As Integer =
Private Sub CommandButton2_Click()
Dim rngTable As Range
Dim ws As Worksheet
Dim StartCell As Range
Const ColumntoFilter1 As Integer = 2
Const FilterCriteria1 As String = "Amended Holiday"
Const ColumntoFilter2 As Integer = 2
Const FilterCriteria2 As String = "Designated Holiday"
Const ColumntoFilter3 As Integer = 2
Const FilterCriteria3 As String = "Max Sick Hours"
Const ColumntoFilter4 As Integer = 2
Const FilterCriteria4 As String = "Leave Without Pay 02"
Const ColumntoFilter5 As Integer = 2
Const FilterCriteria5 As String = "Holiday Accrued"
Const ColumntoFilter6 As Integer = 2
Const FilterCriteria6 As String = "Leave Without Pay 03"
Const ColumntoFilter7 As Integer = 2
Const FilterCriteria7 As String = "Max Holiday Hours"
Const ColumntoFilter8 As Integer = 2
Const FilterCriteria8 As String = "Leave Without Pay 04"
Const ColumntoFilter9 As Integer = 2
Const FilterCriteria9 As String = "Sick Accrued"
Set ws = ActiveSheet
'Set the starting position (Top-left most position) of your data range
Set StartCell = ws.Range("B1")
'Turn off autofilter in case it's already active
ws.AutoFilterMode = False
'Define data table
Set rngTable = StartCell.CurrentRegion
'Filter and delete data
With rngTable
.AutoFilter Field:=ColumntoFilter1, Criteria1:=FilterCriteria1
.AutoFilter Field:=ColumntoFilter2, Criteria1:=FilterCriteria2
.AutoFilter Field:=ColumntoFilter3, Criteria1:=FilterCriteria3
.AutoFilter Field:=ColumntoFilter4, Criteria1:=FilterCriteria4
.AutoFilter Field:=ColumntoFilter5, Criteria1:=FilterCriteria5
.AutoFilter Field:=ColumntoFilter6, Criteria1:=FilterCriteria6
.AutoFilter Field:=ColumntoFilter7, Criteria1:=FilterCriteria7
.AutoFilter Field:=ColumntoFilter8, Criteria1:=FilterCriteria8
.AutoFilter Field:=ColumntoFilter9, Criteria1:=FilterCriteria9
.Offset(1, 0).EntireRow.Delete
End With
'Turn filters off again
ws.AutoFilterMode = False
Set rngTable = Nothing
Set StartCell = Nothing
Set ws = Nothing
End Sub
每个AutoFilter语句都会覆盖上一个语句,因此最后,代码只会删除列B中包含
s
的所有行--请尝试在每个AutoFilter语句之间添加delete语句:
With rngTable
.AutoFilter Field:=ColumntoFilter1, Criteria1:=FilterCriteria1
.Offset(1, 0).EntireRow.Delete
.AutoFilter Field:=ColumntoFilter2, Criteria1:=FilterCriteria2
.Offset(1, 0).EntireRow.Delete
.AutoFilter Field:=ColumntoFilter3, Criteria1:=FilterCriteria3
.Offset(1, 0).EntireRow.Delete
.AutoFilter Field:=ColumntoFilter4, Criteria1:=FilterCriteria4
.Offset(1, 0).EntireRow.Delete
.AutoFilter Field:=ColumntoFilter5, Criteria1:=FilterCriteria5
.Offset(1, 0).EntireRow.Delete
.AutoFilter Field:=ColumntoFilter6, Criteria1:=FilterCriteria6
.Offset(1, 0).EntireRow.Delete
.AutoFilter Field:=ColumntoFilter7, Criteria1:=FilterCriteria7
.Offset(1, 0).EntireRow.Delete
.AutoFilter Field:=ColumntoFilter8, Criteria1:=FilterCriteria8
.Offset(1, 0).EntireRow.Delete
.AutoFilter Field:=ColumntoFilter9, Criteria1:=FilterCriteria9
.Offset(1, 0).EntireRow.Delete
完美的这正是我所需要的,我感谢你的帮助!