【问题标题】:Using Excel VBA to Select a filtered range where results will vary使用 Excel VBA 选择结果会有所不同的过滤范围
【发布时间】:2014-07-19 11:43:29
【问题描述】:

我正在使用电子表格来生成报告。数据会因我报告的部门而异。我需要选择 A 列中作为过滤器结果的记录并将它们粘贴到 B 列中,粘贴后我需要清除 A 列中的单元格,然后删除过滤器。我已经能够适应过滤器的可变标准;但是,我的问题是选择变量范围。要选择的数据永远不会从单元格 A2 开始,之后的任何单元格都是公平的游戏。如何选择变化的范围?如何让用户与宏交互以选择单元格?

这对我来说可以按我的所有变量进行过滤。

Cells.Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$F$65000").AutoFilter Field:=1, Criteria1:=Array( _
"1000", "1001", "1005", "ZBIL", "1002", "1003", "1004", "1006", "1007", "1008", "1009", "AOMS",      "ASPS", "NATL", "ZCON", "ZREP"), Operator:=xlFilterValues
On Error Resume Next

我正在使用以下选择范围,第一行用于选择要复制的数据(尽管它仍然选择单元格 A1,我不希望选择该单元格)。第二行返回错误“对象不支持此属性或方法。我尝试了范围选择 ToRight,但最终选择了整个工作表。

Range(ActiveCell, ActiveCell.End(xlDown)).Select
Selection(Selection, Selection.xlToRight).Select
Selection.FillRight

感谢您提供的任何帮助。

【问题讨论】:

标签: excel select filtering copy-paste vba


【解决方案1】:

这可能不是最有效的解决方案,但您可以遍历所有单元格/行并检查过滤器是否隐藏了它们:

Dim lastrow As Integer
Dim i As Integer

With ActiveSheet
    lastrow = .Cells(Rows.Count, 1).End(xlUp).Row

    For i = 3 To lastrow
        If .Rows(i).Hidden = False Then
            .Cells(i, 2).Value = .Cells(i, 1).Value
            .Cells(i, 1).Value = ""
        End If
    Next i

End With

【讨论】:

  • 谢谢,这有效,但我仍然缺少一些数据。
  • 非常感谢!这在我在过滤条件之前添加了一个 on Error Resume 之后起作用。
  • 使用 On Error Resume Next 可能很危险 - 它会跳过代码中的错误,而不是强迫您修复它们。我建议删除它并解决导致错误的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
相关资源
最近更新 更多