如何使用另一个列表的内容过滤列表?

时间:2014-03-03 17:15:38

标签: excel excel-vba excel-formula excel-2010 vba

我有一个ID列表(大约140个),我想查询一个大的(50k +)电子表格。这不是一个简单的“项目是否存在于列表中”;我想查看存储在大电子表格中的详细信息。最简单的方法是手动使用ID中的过滤器和键,但ID的列表非常大,这一次输入140 ID是一个非常痛苦的过程。有没有办法可以使用高级过滤器或宏来帮助我过滤我想要的项目?

注意:我不想使用VBA,因为这需要花费很多时间。我已经了解到数据透视表是最好的解决方案。我想知道是否有任何公式或宏可以更容易地做到这一点。

2 个答案:

答案 0 :(得分:2)

如果您希望使用VBA而不添加列,可以使用以下内容:

Sub Filter()
Dim Criteria As Variant
Criteria = Worksheets("Sheet1").Range("A1:A140")

Worksheets("Sheet2").Range("$A$1:$B$10").AutoFilter Field:=1, Criteria1:=Criteria, Operator:=xlFilterValues
End Sub

注意: 以上内容仅适用于您的ID不是数字的情况,如果您的ID可以使用以下内容:

Sub Filter2()
Dim tempCriteria As Variant
Dim i As Long
Dim Criteria() As String

tempCriteria = Worksheets("Sheet1").Range("A1:A140")

ReDim Criteria(1 To UBound(tempCriteria))

For i = 1 To UBound(tempCriteria)
    Criteria(i) = CStr(tempCriteria(i, 1))
Next

Worksheets("Sheet2").Range("$A$1:$B$10").AutoFilter Field:=1, Criteria1:=Criteria, Operator:=xlFilterValues
End Sub

在上述两个代码中,将Worksheets("Sheet1").Range("A1:A140")更改为包含140个ID的范围,并将Worksheets("Sheet2").Range("$A$1:$B$10")更改为您查询所在的范围。

答案 1 :(得分:1)

实际上是的,你可以使用高级过滤器来做到这一点:

enter image description here

在示例F1中:F6包含可能的值(在您的情况下,包含140个值的范围)。标准范围是A8:C9,在C9中你只需写下公式:

=COUNTIF($F$1:$F$6;A13)>0

A13是包含数据范围中第一个ID的单元格。

你应该在高级过滤器中写这个:

enter image description here

不要忘记C9公式。