【问题标题】:Set value of a range using array when filter present存在过滤器时使用数组设置范围的值
【发布时间】:2017-09-19 02:20:35
【问题描述】:

考虑到该范围可能包含一些隐藏的行,我想将一个范围的值放入一个数组中,处理数组数据,然后将该数组中的值设置回它来自的范围。

我们以一张有两列的表格为例:

----A-------B-----
    VALUE | FILTER
    1     | P
    2     | N
    3     | N
    4     | P
    5     | P

然后您应用自动过滤器并将 B 列设置为仅显示带有“P”的单元格,这将隐藏第 3 行和第 4 行。

我得到这样的范围:

Sub WorkRange()
    Dim R As Range

    Set R = ActiveSheet.Range("A2:A6")
    Values = R.Value

    Values(1, 1) = "New 1"
    Values(2, 1) = "New 2"
    Values(3, 1) = "New 3"
    Values(4, 1) = "New 4"
    Values(5, 1) = "New 5"

    R.Value = Values
End Sub

该代码将获取从 A2 到 A6 的值,包括被自动筛选定义过滤掉的隐藏行。当我尝试使用更改的数据设置该范围的值时,它会保持隐藏行不变并将可见单元格(单元格 A2、A5 和 A6)设置为“新 1”。

无论行状态如何,我都想在该范围内设置值。

我有一些有数千行的工作表。如果我使用 .Cells 逐行更改,则需要的时间太长。使用数组来设置范围的值要快得多,并且它适用于不存在过滤器的情况。

【问题讨论】:

  • 您可以先取消过滤,然后在粘贴新值后重新应用过滤器吗?
  • 我实际上并没有直接使用 VBA 宏,而是在 Delphi 中使用 COM 对象来处理工作表。而且由于我收到了许多带有许多不同过滤器的新文件,因此如果我可以在不更改工作表过滤器的情况下解决该问题会更好。这需要一些我可以避免的手工工作。

标签: arrays excel vba range autofilter


【解决方案1】:

将数组结果应用到不同的工作表中,并在公式中使用vlookup=refercells 引用这些范围

range("A2:A"&lrow).formula = "=sheetnamecell"

这是将数组结果应用回过滤范围的唯一方法。如果数组范围没有被过滤,你可以直接将结果应用到范围。

【讨论】:

    猜你喜欢
    • 2013-04-19
    • 1970-01-01
    • 2020-01-10
    • 2015-10-07
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    相关资源
    最近更新 更多