【问题标题】:Excel VBA to filter based on rangeExcel VBA根据范围进行过滤
【发布时间】: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 个宏让某人手动设置过滤器然后运行第二个。但我认为我可以根据一系列数据进行宏自动过滤。

标签: vba excel


【解决方案1】:

我发现了错误。在代码中犯了一个小错误。应该有一个“。”在我的范围之前。现在已修复。只是想发布更新,以防有人想做同样的事情。

这个

With Sheets("Control")
    lrow = Range("A50").End(xlUp).Row

应该是这样的

With Sheets("Control")
    lrow = .Range("A50").End(xlUp).Row

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多