很遗憾,没有内置的方法可以做到这一点。
幸运的是,它仍然是可能的。
我把这个函数放在一起,它会过滤你的值。它的作用是列出要自动过滤的范围内的所有值,然后删除要排除的值。
此函数仅返回要保留的值数组。因此,从技术上讲,您并没有按排除列表进行过滤。
请注意:这具有最少的测试
Function filterExclude(filterRng As Range, ParamArray excludeVals() As Variant) As Variant()
Dim allValsArr() As Variant, newValsArr() As Variant
Rem: Get all values in your range
allValsArr = filterRng
Rem: Remove the excludeVals from the allValsArr
Dim aVal As Variant, eVal As Variant, i As Long, bNoMatch As Boolean
ReDim newValsArr(UBound(allValsArr) - UBound(excludeVals(0)) - 1)
For Each aVal In allValsArr
bNoMatch = True
For Each eVal In excludeVals(0)
If eVal = aVal Then
bNoMatch = False
Exit For
End If
Next eVal
If bNoMatch Then
newValsArr(i) = aVal
i = i + 1
End If
Next aVal
filterExclude = newValsArr
End Function
然后你会像这样使用上面的函数:
Sub test()
Dim ws As Worksheet, filterRng As Range
Set ws = ThisWorkbook.Worksheets(1)
Set filterRng = ws.UsedRange.Columns("A")
With filterRng
.AutoFilter Field:=1, Criteria1:=filterExclude(filterRng, _
Array("Blah2", "Blah4", "Blah6", "Blah8")), Operator:=xlFilterValues
End With
End Sub
您的Criteria1 设置为等于filterExclude() 函数返回的数组。
在您的特定情况下,您的代码如下所示:
Sub Button1_Click()
Dim ws As Worksheet, filterRng As Range, exclVals() As Variant
Set ws = ThisWorkbook.Worksheets("RawData")
Set filterRng = ws.UsedRange.Columns("FP")
exclVals = Array("John", "Kelly", "Don", "Chris")
ws.AutoFilterMode = False
With filterRng
.AutoFilter Field:=1, Criteria1:=filterExclude(filterRng, exclVals), _
Operator:=xlFilterValues
End With
End Sub
只要你也有我在公共模块中提供的功能。
现场观看