提前AutoFilter排除某些值
我想要在excel中过滤大量名单。 在另一张表中,我已经包含了一个我想要过滤的名字列表,并从较大的列表中排除。 我将如何使用高级filter来做到这一点? 我已经在下面尝试过,但似乎没有工作。 我的大名单是在K2:K5000
和我的标准是在H2:H3
(标准将增长,但我保持列表小testing)。 任何帮助将不胜感激!
Sub Filter() Sheet5.Range("K2:K5000").AdvancedFilter Action:=xlFilterInPlace, _ CriteriaRange:=Sheets("Sheet3").Range("H2:H3"), Unique:=False End Sub
要使用高级filter从K2:K5000
排除 H2:H3
的值,可以使用以下方法:
- 确保单元格
K1
不是空的(input任何标题) - find2个未使用的单元格(例如
I1:I2
) - 把
I1
留空 -
在
I2
input以下公式=ISNA(MATCH(K2,$H$2:$H$3,0))
-
使用以下代码排除行
Sheet5.Range("K1:K5000").AdvancedFilter Action:=xlFilterInPlace, _ CriteriaRange:= Sheets("Sheet3").Range ("I1:I2"), Unique:=False
我不知道如何使用高级filter来排除,但是您可以在高级filter中使用公式 (靠近底部)。 但是,您可以使用字典来存储要排除的值,然后排除(隐藏行或自动筛选器,使其不在排除列表中)
Sub Filter() Dim i as integer Dim str as string Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") With Worksheets("Sheet3") For i = 2 To 3 str = CStr(.Range("H" & i).Value) If Not dict.exists(str) Then dict.Add str, vbNullString End If Next i End With With Sheet5 For i = 2 To 5000 str = CStr(.Range("K" & i).Value) If Len(str) > 0 And dict.exists(str) Then .Range("K" & i).EntireRow.Hidden = True Elseif 'alternatively, you can add those that aren't found 'to an array for autofilter End if Next i End With 'If building autofilter array, apply filter here. End Sub
使用AutoFilter:
使用一个string数组作为标准,使用AutoFilter的“Operator:= xlFilterValues”参数进行过滤。 根据需要构build数组,我select使用for循环和分割(快速编写和testing,但由于多种原因不理想)构buildstring。
注意:AutoFilter应用于标题,而不是数据。
With Sheet5 .AutoFilterMode = False .Range("K1").AutoFilter _ Field:=1, _ Criteria1:=arr, _ Operator:=xlFilterValues End With
我想你首先需要了解如何使用高级filter。
有一个很好的教程,你可以在这里find。
现在基于这个,让我们举个例子。 假设你有下面的数据:
现在,让我们说你想过滤掉Data1和Data2 。 根据链接,您可以使用公式作为标准,但是:
注意:总是在新的列中放置一个公式。 请勿使用列标签或使用不在数据集中的列标签。 创build列(B6)中第一个单元格的相对引用。 该公式必须评估为TRUE或FALSE。
所以在我们的例子中,我们的相对引用是A11
(您想要过滤的字段中的第一个单元格或项目)。
现在我们在B2
做一个公式,因为我们不能使用A2
,它是一个列标签。
input公式: =A11<>"Data1"
。
上面关注了Data1,但是我们也需要过滤掉Data2 。
所以我们在C2
做出另一个公式: =A11<>"Data2"
一旦正确设置,您现在可以手动或以编程方式应用Advance Filter
。 一个类似于你的代码如下:
With Sheets("Sheet1") .Range("A10:A20").AdvancedFilter xlFilterInPlace, .Range("A1:C2") End With
和Hola! 我们已经成功过滤了Data1和Data2 。
结果:
我花了一段时间才弄清楚这一点,但是由于上面的这个链接,我设法解决了这个问题。
我今天也学到了一些新东西:-)。 HTH。
额外:
我看到你在另一张纸上有你的标准,所以你必须在你的公式中使用它。
因此,如果在我们的示例中,Sheet2中的H2:H3
中有Data1和Data2 ,则B2
和C2
公式分别为: =A11<>Sheet2!H2
和=A11<>Sheet2!H3
。