首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果单元格包含某些文本,则删除行

如果单元格包含某些文本,则删除行
EN

Stack Overflow用户
提问于 2015-02-28 16:19:56
回答 2查看 1.3K关注 0票数 1

我想按以下顺序执行此函数:

  1. 激活M列中的自动筛选功能
  2. ,勾选“cell”和“空白”
  3. 删除C列中包含“AQ*”、“AI*”和“BG”的单元格的整行。(注意:*表示字母后面的数字)

我尝试过使用自动筛选进行宏录制,但它只删除指定范围内的行(如果我使用其他数据集,可能会有所不同)。VBA,如下所示。

有没有更简单/更好的方法来实现这一点?

感谢您的帮助!

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2015-02-28 16:54:55

将带通配符的筛选条件放入一个数组中,并循环使用它们。您将找不到更快的删除行的方法,只要您在删除行之前检查是否存在要删除的行,它就是安全的。

代码语言:javascript
复制
    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,删除找到的行。

票数 1
EN

Stack Overflow用户

发布于 2015-02-28 19:02:13

出于此类目的,不需要使用自动筛选

使用这个

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28779638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档