Excel 2010 - 基于另一个工作表中的列中的值筛选工作表

时间:2015-02-23 17:01:15

标签: excel filtering

工作表1(" WS1")有很多行和26列。

工作表2(" WS2")包含更少的行和17列。

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

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

我希望WS1只显示其列H值在 W2 | A列中找到的行。

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

  1. 在WS1标题行上设置过滤器
  2. 展开WS1 | Column H
  3. 的过滤器
  4. 取消全选
  5. 单击WS2 | A列
  6. 中找到的每个值旁边的框

    但这太麻烦了。我试图找出使用AutoFilters做到这一点的方法,但这似乎不可能。

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

    请注意, WS2 | A列中的值可能会随时间而变化。如果我这样做的话,那将是非常棒的,它将基于WS2中的当前值。

1 个答案:

答案 0 :(得分:0)

试试这个小宏:

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 发生变化,只需重新运行宏。

宏非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除宏:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 要使用Excel中的宏:

      1. ALT-F8
      2. 选择宏
      3. 触碰RUN
      4. 要了解有关宏的更多信息,请参阅:

        http://www.mvps.org/dmcritchie/excel/getstarted.htm

        http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

        必须启用宏才能使其生效!