【发布时间】: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