当过滤器存在时,使用数组设置范围的值

时间:2017-04-21 23:43:22

标签: arrays excel vba range autofilter

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

让我们举一个两列的例子:

----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的值,包括由AutoFilter定义过滤掉的隐藏行。当我尝试使用更改的数据设置该范围的值时,它会保持隐藏的行不变,并将可见的单元格(单元格A2,A5和A6)设置为“新建1”。

无论行状态如何,我都希望设置该范围内的值。

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

1 个答案:

答案 0 :(得分:0)

将数组结果应用到另一张表中,并用vlookup=refercells引用公式中的那些范围

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

这是将数组结果应用回过滤范围的唯一方法。如果未过滤数组范围,则可以将结果直接应用于该范围。

谢谢, Prabhu Murugan