2013-02-26 88 views
0

我在这一天的大部分时间里一直在努力解决这个问题,并在过程中使用借用的代码从网络中几次崩溃了Excel 2010。Excel高级过滤器 - 过滤具有多个单元格值的表格

我有一个表(见下文),其中有一列称为'ID'的唯一值。我也有一个ID列表,例如[2 5 7 8],它们是表格中的子集。我只想显示与子集中的表项相对应的表项。

我相信这一定是可以做到的,但我限制了VB的技能。

ID A__ B ____  C _ 
1, 1.1, 2.1,  -2.1 
2, 1.2, 2.2,  -2.1 
3, 1.3, 2.3,  -2.1 
4, 1.4, 2.4,  -2.1 
5, 1.5, 2.5,  -2.1 
6, 1.6, 2.6,  -2.1 
7, 1.7, 2.7,  -2.1 
8, 1.8, 2.8,  -2.1 

有人可以提出一个解决方案吗?

感谢 亚历克斯

回答

1

没有必要在VBA来做到这一点。

只需添加另一列并使用以下公式填充它:(假设它从第2行开始,ID在列A中,并且您选择的ID列表在Sheet2!A1:A10中 - 相应调整)

 
=--NOT(ISERROR(MATCH(A2,Sheet2!$A$1:$A$10,0))) 

向下复制这个公式。对于在列表中具有ID的每一行,此公式都将返回TRUE,否则返回FALSE。现在你只需要应用一个自动过滤器和过滤器来完成! :-)

如果将与您选择的工作表中该代码,自动筛选会自动更新:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Target, Me.Range("A1:A10")) Is Nothing Then Exit Sub 

    With Worksheets("Sheet1") 
     .AutoFilterMode = False 
     On Error Resume Next 
     .Range("$A:$C").AutoFilter Field:=3, Criteria1:="1" 
    End With 
End Sub 
+0

这是一个很好的解决方案。我唯一的问题是,如果我对子集进行更改,它不会立即反映在AutoFiltered表中,这可能是灾难性的。例如,如果在Sheet2中对该列进行更改,是否有办法使AutoFilter刷新? – AlexS 2013-02-26 23:05:25

+0

您需要使用重新应用自动筛选器的小型Sheet_Change事件自动执行此操作。 – 2013-02-26 23:11:17

+1

当子集和表格在不占用相同行的同一张纸上时,得到它的作用---- http://superuser.com/questions/249758/how-to-i-auto-refresh-an-excel-auto-filter - 当数据发生变化时 – AlexS 2013-02-26 23:15:16