为什么以下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
---
答案 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