【问题标题】:Deleting Rows meeting certain criteria in excel using vba (autofilter)使用vba(自动过滤器)在excel中删除满足某些条件的行
【发布时间】:2013-06-17 17:51:37
【问题描述】:

我正在尝试使用自动过滤器根据条件删除行。因为我正在使用的工作表中有很多数据。如下所示,我在这个网站上找到了一个代码,我对其进行了编辑以符合我需要的标准。代码运行没有错误,但不会删除任何行!任何帮助,将不胜感激!我要在其中查找条件的列是 B 列。

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

【问题讨论】:

    标签: vba autofilter


    【解决方案1】:

    每个 AutoFilter 语句都会覆盖前一个语句,因此最后,您的代码只会删除 B 列中带有 Sick Accrued 的所有行 -- 尝试在每个 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
    

    【讨论】:

    • 完美。这正是我需要的,感谢您的帮助!
    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多