【发布时间】:2015-06-08 17:16:54
【问题描述】:
全部,
我正在尝试根据从另一张工作表获取的数据范围来过滤工作表上的项目。我当前的宏仅基于该范围内的第一个单元格进行过滤。
我希望它过滤的范围会每天都在变化。有时可能是 3 个项目,有时可能是 7 个项目。所以我不能只让过滤器查看 4 个特定单元格。
这是我目前拥有的,但我不确定为什么它不是基于所有 4 个单元格进行过滤,而是仅基于该范围内的第一个单元格进行过滤。
Dim POinput As Range, cell As Range
Dim lrow As Integer
Dim arrList() As String, lngcnt As Long
With Sheets("Control")
lrow = Range("A50").End(xlUp).Row
Set POinput = .Range("A5:A" & lrow)
End With
lngcnt = 0
For Each cell In POinput
ReDim Preserve arrList(lngcnt)
arrList(lngcnt) = cell.Text
lngcnt = lngcnt + 1
Next
Sheets("ACTOpenItems").Select
ActiveSheet.Range("A1:FH" & lastrow).AutoFilter Field:=2, Criteria1:=arrList, _
Operator:=xlFilterValues
例如,假设我在“控制”选项卡的 1 和 3 中输入了数据,因为这些是我要在“ACTOpenItems”选项卡的 B 列中过滤的项目。
ACTOpenItems 选项卡如下所示。
类型/帐户/金额
狗 / 1 / 100
猫 / 2 / 150
鸟 / 3 / 200
狗 / 4 / 250
猫 / 1 / 300
鸟 / 2 / 350
狗 / 3 / 400
猫 / 4 / 450
鸟 / 1 / 500
狗 / 2 / 550
猫 / 3 / 600
鸟 / 4 / 650
我想要结果。
类型/帐户/金额
狗 / 1 / 100
鸟 / 3 / 200
猫 / 1 / 300
狗 / 3 / 400
鸟 / 1 / 500
猫 / 3 / 600
提前感谢您的帮助。
【问题讨论】:
-
您能提供示例数据和所需的输出吗?
-
“ACTOpenItems”选项卡有大量数据。我只想查看与“控制”选项卡上输入的数据相关的行。因此,如果运行宏的人今天输入帐号 1、3、7 和 9,我希望宏通过 B 列中的这 4 个帐户过滤“ACTOpenItems”选项卡。明天这些帐户可能会有所不同。所以我不能让它总是按 1、3、7 和 9 过滤
-
所以你不必处理那些东西:
ReDim arrList(POinput.Cells.Count)。ReDim Preserve似乎从来没有像我预期的那样工作。 -
Adding a filter 无法满足您的需求?
-
添加过滤器效果很好。这就是我们目前正在做的事情。但这只是过程中的一个步骤。我们目前的流程是每天花 30 分钟。我在大约 3 秒内让宏工作(没有过滤器部分)。过滤器处于该过程的中途。在第一次运行后我总是可以有 2 个宏让某人手动设置过滤器然后运行第二个。但我认为我可以根据一系列数据进行宏自动过滤。