我想在Excel中过滤Sheet中的大型名称列表。在另一张表中,我包含了一个名称列表,我希望将其从较大的列表中过滤掉并排除。我如何使用高级过滤器来执行此操作?我在下面试过这个,但它似乎不起作用。我的重要名单位于K2:K5000
,我的标准位于H2:H3
(标准会增加,但我会将列表保留为小测试版)。任何帮助将不胜感激!
Sub Filter()
Sheet5.Range("K2:K5000").AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Sheets("Sheet3").Range("H2:H3"), Unique:=False
End Sub
答案 0 :(得分:3)
要使用高级过滤器从H2:H3
K2:K5000
排除,您可以使用以下方法:
K1
不为空(输入任何标题)I1:I2
)I1
留空在I2
=ISNA(MATCH(K2,$H$2:$H$3,0))
使用以下代码排除行
Sheet5.Range("K1:K5000").AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:= Sheets("Sheet3").Range ("I1:I2"), Unique:=False
答案 1 :(得分:2)
我不确定如何使用高级过滤器排除,但you can use formulas in your advanced 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:
使用字符串数组作为条件,使用AutoFilter的“Operator:= xlFilterValues”参数进行过滤。根据需要构建你的数组,我选择通过构建一个带有for循环和拆分的字符串来做(快速编写和测试,但由于多种原因不理想)。
注意:AutoFilter应用于标题,而不是数据。
With Sheet5
.AutoFilterMode = False
.Range("K1").AutoFilter _
Field:=1, _
Criteria1:=arr, _
Operator:=xlFilterValues
End With
答案 2 :(得分:1)
我认为您首先需要了解如何使用高级过滤器 您可以找到一个很好的教程HERE。
现在基于此,让我们举个例子。假设您有以下数据:
现在,我们假设您要过滤掉 Data1 和 Data2 。 根据链接,您可以使用公式作为标准,但是:
注意:始终将公式放在新列中。请勿使用列标签或使用不在数据集中的列标签。创建对列中第一个单元格的相对引用(B6)。公式必须评估为TRUE或FALSE。
因此,在我们的情况下,我们的相对参考是A11
(您希望过滤的字段中的第一个单元格或项目。)。现在我们在B2
中制作公式,因为我们无法使用A2
,它是一个列标签。
输入公式:=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。
其他强>
我看到你在另一张专辑中有你的标准,所以你必须在公式中使用它。
所以如果在我们的例子中你有 Data1 和 Data2 在Sheet2中的H2:H3
中,B2
和C2
中的公式分别为:=A11<>Sheet2!H2
和=A11<>Sheet2!H3
。
答案 3 :(得分:0)
您甚至根本不需要VBA即可实现相同的结果:
在要过滤的数据旁边的第一列中,使用
=VLOOKUP(A2, [nameOfOtherSpreadSheet.xlsx/xlsm/xls/etc]sheetName!$A:$A,1, FALSE)
其中A2是您要搜索的值,字段2是要在其中搜索该值的范围的参考,1是您要搜索的列的索引,而FALSE告诉{ {1}}仅返回完全匹配项。
在要过滤的数据旁边的第二列中,使用
VLOOKUP
其中G2是可能返回错误的函数的引用,而FALSE是要在该函数引发错误时返回的值。
这应该返回原始数据集,但不包含您要排除的值。
记录一个宏以完成此操作,这是一步,而不是5个以备将来使用。