我想按以下顺序执行此函数:
我尝试过使用自动筛选进行宏录制,但它只删除指定范围内的行(如果我使用其他数据集,可能会有所不同)。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发布于 2015-02-28 16:54:55
将带通配符的筛选条件放入一个数组中,并循环使用它们。您将找不到更快的删除行的方法,只要您在删除行之前检查是否存在要删除的行,它就是安全的。
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,删除找到的行。
发布于 2015-02-28 19:02:13
出于此类目的,不需要使用自动筛选
使用这个
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 Subhttps://stackoverflow.com/questions/28779638
复制相似问题