如果单元格包含特定文本,则删除行

我想按这个顺序执行这个function:
1.激活自动过滤function
2.在M栏中,勾选“存款逆转”和“空白”
3.删除C列中包含'AQ *','AI *','BG'的单元格的整行(注意:*表示字母后面的数字)

我已经尝试使用自动filter的macroslogging,但它只删除行到指定的范围(这可能会有所不同,如果我使用其他数据)。 VBA按照以下。

有没有更容易/更好的方法来执行此操作?

感谢你的帮助!

Sub Macro4() ' ' Macro4 Macro ' ' Rows("1:1").Select Application.CutCopyMode = False Selection.AutoFilter ActiveSheet.Range("$A$1:$N$46437").AutoFilter Field:=13, Criteria1:= _ "=Deposit Reversed", Operator:=xlOr, Criteria2:="=" ActiveSheet.Range("$A$1:$N$46437").AutoFilter Field:=3, Criteria1:=Array( _ "AQ", "AQ01E166N", "AQ01E294N", "AQ01E316N", "AQ01E373N"), Operator:= _ xlFilterValues Rows("2:2").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$1:$N$46017").AutoFilter Field:=3, Criteria1:=Array( _ "AI", "AI04_MMRASHI_TWT", "AI04E230N", "AI04E269N", "AI04E323N"), Operator:= _ xlFilterValues ActiveWindow.SmallScroll Down:=-6 Rows("10236:10236").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$1:$N$45998").AutoFilter Field:=3, Criteria1:=Array( _ "BG", "BG01A004", "BG01H082", "BG01H106N"), Operator:=xlFilterValues ActiveWindow.SmallScroll Down:=-3 Rows("5:5").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp End Sub 

将通配符的过滤条件放入一个数组中并循环。 您不会find更快的删除行的方法,只要您在删除行之前检查是否存在要删除的行,它就是安全的。

  Dim c As Long, vCRITC As Variant vCRITC = Array("AQ*", "AI*", "BG*") Application.ScreenUpdating = False Application.DisplayAlerts = False With Sheets("Sheet7").Cells(1, 1).CurrentRegion If .AutoFilter Then .AutoFilter With .Resize(.Rows.Count, Columns("A:N").Count) .AutoFilter Field:=13, Criteria1:="=Deposit Reversed", Operator:=xlOr, Criteria2:="=" For c = LBound(vCRITC) To UBound(vCRITC) .AutoFilter Field:=3, Criteria1:=Chr(61) & vCRITC(c) With .Offset(1, 0) If CBool(Application.Subtotal(103, .Columns(3))) Then _ .Rows.Delete End With .AutoFilter Field:=3 Next c End With .AutoFilter End With Application.DisplayAlerts = True Application.ScreenUpdating = True 

你原来的问题似乎有一个错误,没有包含BG的星号通配符。 这可能与使用星号标注斜体的作文编辑器有关。 这首先在列M上设置条件,然后将每个通配符条件添加(并删除)到C列,删除它find的行。

为此目的,不需要使用自动filter

用这个

 Sub test() Dim i& i = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row With ActiveSheet While i <> 1 If .Cells(i, "M").Value = "deposit reversed" Or .Cells(i, "M").Value = "" Then If UCase(.Cells(i, "C").Value) Like "AQ*" Or _ UCase(.Cells(i, "C").Value) Like "AI*" Or _ UCase(.Cells(i, "C").Value) Like "BG*" Then .Rows(i).Delete End If End If i = i - 1 Wend End With End Sub