【问题标题】:Deleting rows with specific words with VBA使用 VBA 删除具有特定单词的行
【发布时间】:2015-03-17 10:55:21
【问题描述】:

目前我的 excel 数据由特定的单词和#N/A 组成,单词就像“build One”“proj ex”。我准备了一个代码,它只删除一个条件,但我想要很多单词。下面是我的代码。欢迎任何帮助。谢谢。

Sub del()
Dim rng1 As Range
Set rng1 = Range([B2], Cells(Rows.Count, "B").End(xlUp))
ActiveSheet.AutoFilterMode = False
With rng1
.AutoFilter Field:=1, Criteria:=("#N/A")
.Delete xlUp
End With
End Sub

【问题讨论】:

  • 您可以创建一个包含所有单词的数组,然后循环该数组。 #
  • 嘿,保罗,我是 VBA 的新手,如果你能给我一个在数组中循环它的例子,那就太好了。

标签: vba excel


【解决方案1】:

使用变体数组作为单词列表的构造函数。

Sub del()
    Dim rng1 As Range, vDELs As Variant

    vDELs = Array("#N/A", "proj ex", "build One")
    Set rng1 = Range([B2], Cells(Rows.Count, "B").End(xlUp))

    ActiveSheet.AutoFilterMode = False
    With rng1
        .AutoFilter Field:=1, Criteria1:=(vDELs), Operator:=xlFilterValues
        With .Offset(1, 0)
            If CBool(Application.Subtotal(103, .Cells)) Then _
                .EntireRow.Delete
        End With
        .AutoFilter
    End With
End Sub

很好地抓住Criteria1:=(vDELs) 中的数组。这很重要。在提交操作之前检查是否有要删除的行也是一个好主意。

【讨论】:

  • 感谢 Jeeped 浏览它。 If CBool​​(Application.Subtotal(103, .Cells)) 做什么?而 103 是常数?
  • @Kiran - 工作表SUBTOTAL function 不计算隐藏值,因此如果计算任何值,它将返回一个非零值,CBool 将其解释为 True103 是指定 Subtotal 充当 CountA。有关详细信息,请参阅提供的链接。
  • 非常感谢 Jeeped,这很有帮助。代码完美运行。祝你有美好的一天:)
【解决方案2】:

你可以试试这样的:

sFormula = "=IF(OR(ISERROR(B:B),B:B=""proj ex"", B:B=""build One""),NA(),"""")"

Set rng1 = Range("A2:A" & Cells(Rows.Count, "B").End(xlUp).Row)
rng1.Formula = sFormula

' 现在使用 SpecialCells 删除行:

rng1.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete shift:=xlUp

更多关于这种技术的信息,请访问SO: How to delete multiple rows in Excel without a loopRon de Bruin Excel VBA Top Banana: Special Cells limit bug

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多