提前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留空
  • I2input以下公式

      =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。

现在基于这个,让我们举个例子。 假设你有下面的数据:

在这里输入图像描述

现在,让我们说你想过滤掉Data1Data2 。 根据链接,您可以使用公式作为标准,但是:

注意:总是在新的列中放置一个公式。 请勿使用列标签或使用不在数据集中的列标签。 创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! 我们已经成功过滤了Data1Data2

结果:

在这里输入图像说明

我花了一段时间才弄清楚这一点,但是由于上面的这个链接,我设法解决了这个问题。
我今天也学到了一些新东西:-)。 HTH。

额外:

我看到你在另一张纸上有你的标准,所以你必须在你的公式中使用它。
因此,如果在我们的示例中,Sheet2中的H2:H3中有Data1Data2 ,则B2C2公式分别为: =A11<>Sheet2!H2=A11<>Sheet2!H3