Excel 2010-根据另一工作表中某列中的值筛选工作表

Excel 2010-根据另一工作表中某列中的值筛选工作表,excel,filtering,Excel,Filtering,工作表1 WS1有许多行和26列 工作表2 WS2具有较少的行和17列 WS2 |列A包含WS1 |列H中的数据子集 这两列在标题行中具有相同的标签 我希望WS1只显示其H列值位于W2 | A列某处的行 当然,我可以手动执行此操作: 在WS1的标题行上设置过滤器 展开WS1 |列H的过滤器 取消选择 单击WS2 |列A中每个值旁边的框 但这太麻烦了。我试着用自动过滤器解决这个问题,但这似乎不可能 实现这一目标的最佳方式是什么 请注意,WS2 |列A中的值可能会随时间而变化。如果我在任何时候这样做

工作表1 WS1有许多行和26列

工作表2 WS2具有较少的行和17列

WS2 |列A包含WS1 |列H中的数据子集

这两列在标题行中具有相同的标签

我希望WS1只显示其H列值位于W2 | A列某处的行

当然,我可以手动执行此操作:

在WS1的标题行上设置过滤器 展开WS1 |列H的过滤器 取消选择 单击WS2 |列A中每个值旁边的框 但这太麻烦了。我试着用自动过滤器解决这个问题,但这似乎不可能

实现这一目标的最佳方式是什么

请注意,WS2 |列A中的值可能会随时间而变化。如果我在任何时候这样做都是基于WS2中的当前值,那就太棒了。

试试这个小宏:

Sub AutoFilterHelper()
    Dim sh1 As Worksheet, sh2 As Worksheet, N As Long
    Dim ary()
    Set sh1 = Sheets("WS1")
    Set sh2 = Sheets("WS2")

    N = sh2.Cells(Rows.Count, "A").End(xlUp).Row
    ReDim ary(1 To N - 1)

    For i = 1 To N - 1
        ary(i) = sh2.Cells(i + 1, "A").Value
    Next i

    sh1.Range("H:H").AutoFilter Field:=1, Criteria1:=(ary), Operator:=xlFilterValues
End Sub
它将从WS2获取数据,并将其用于WS1中的筛选条件

如果WS2发生更改,只需重新运行宏

宏非常易于安装和使用:

ALT-F11将显示VBE窗口 ALT-I ALT-M打开一个新模块 粘贴内容并关闭VBE窗口 如果保存工作簿,宏将与工作簿一起保存。 如果在2003年以后使用Excel版本,则必须保存 文件的格式为.xlsm而不是.xlsx

要删除宏,请执行以下操作:

如上所述打开VBE窗口 清除代码 关闭VBE窗口 要使用Excel中的宏,请执行以下操作:

ALT-F8 选择宏 触跑 要了解有关宏的更多信息,请参阅:


必须启用宏才能使其工作

两件事:1我想明确我需要显示WS1中过滤行的所有列,而不仅仅是匹配的单元格;2理想情况是在WS1中显示匹配项。但是,如果出于某种原因更容易,在新的工作表中显示过滤后的数据也是可以接受的。谢谢你,Gary的学生。我会尝试一下,但由于我的工作流程有问题,如果可能的话,我希望不用宏也能做到这一点。以某种方式使用过滤器不可能做到这一点吗?@JBB这确实使用过滤器………宏只是自动执行您必须手动执行的操作。明白了。我试试看,然后告诉你。非常感谢!我终于有机会尝试了。没用,但那可能是我。我将上面的宏复制到一个新宏中。我用我工作表的真实标题编辑了它并运行了它。我犯了个错误。很可能我没有正确输入工作表的真实名称。下面是一个示例:我将:Set sh1=SheetsWS1替换为Set sh1=Sheets[JBs Status Report Internal 2c141a90.xlsx]Page1\u 1我是否做得不正确?请注意,这两个工作表始终位于不同的工作簿中。我在问题中没有提到这一点。我希望我在这个问题上没有拖延太久。我现在意识到我应该包括的详细信息是:1两个工作表将是不同工作簿的一部分,2工作簿和工作表文件名将是可变的。我可以每次用正确的名称修改宏,或者,如果发生这种神奇的情况,宏可以提示我输入名称