过滤包含“TUN”的单元格

时间:2018-04-09 16:39:42

标签: excel vba excel-vba

为什么以下VBA不会在数据集范围为30-40k的列U中删除包含“TUN”的单元格。它只取出一些但不是全部 ---

    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$X$21322").AutoFilter Field:=21,        Criteria1:=Array( _
        "TUN"), Operator:=xlFilterValues
    Range("A2:Z2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range("A3:AB30000").Select
    Selection.EntireRow.Delete
    ActiveSheet.ShowAllData
    Rows("2:2").Select
    Selection.AutoFilter
    Range("A2:Z2").Select
    ChDir "C:\Users\soulagep\Documents\Custom Office Templates"
End Sub

---

2 个答案:

答案 0 :(得分:1)

使用" *"通配符来过滤包含字符组的任何内容" TUN"无视首都

Sub test()

Selection.AutoFilter
ActiveSheet.Range("$A$1:$X$21322").AutoFilter Field:=21, Criteria1:="=**TUN**", Operator:=xlAnd
Range("A2:Z2").Select
Range(Selection, Selection.End(xlDown)).Select
Range("A3:AB30000").Select
Selection.EntireRow.Delete
ActiveSheet.ShowAllData
Rows("2:2").Select
Selection.AutoFilter
Range("A2:Z2").Select
ChDir "C:\Users\soulagep\Documents\Custom Office Templates"

End Sub

答案 1 :(得分:1)

我会完全避免使用.Select。这会导致不必要的处理时间并且效率非常低,尤其是在您处于数万行的情况下。更不用说,在某些情况下,它可能是不可靠的。

相反,将数据加载到数组中,如果数组数据等于“TUN”,则将其添加到特殊范围。处理完整个数据后,请删除特殊范围(在本例中为delRng)。

Sub TEST()

    Dim ws As Worksheet, filterArr() As Variant
    Set ws = ThisWorkbook.Worksheets(1)

    filterArr = ws.Range("U:U").Value

    Dim delRng As Range, i As Long

    For i = 1 To UBound(filterArr)
        If filterArr(i, 1) Like "*TUN*" Then
            If delRng Is Nothing Then
                Set delRng = ws.Rows(i)
            Else
                Set delRng = Union(ws.Rows(i), delRng)
            End If
        End If
    Next

    If Not delRng Is Nothing Then delRng.Delete

End Sub