excel vba arrayformula,过滤范围太长

时间:2017-03-31 13:51:29

标签: excel vba excel-vba array-formulas

我正在尝试将ArrayFormula应用于过滤范围 - 即向过滤集rng中的每个单元格添加2并将结果粘贴到rng2的相邻单元格中 - 如下所示:

 Set rng = Range("M2:M" & Cells(Rows.Count, "M").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
 Set rng2 = rng.Offset(0, 1)
 rng2.FormulaArray = "=" & rng.Address & "+ 2"

这会出错 “无法设置Range类的FormulaArray属性”

表示字符串太长(大于255)。 rng.Address

$M$28,$M$480,$M$874:$M$875,$M$889,$M$1111,$M$1302,$M$1410,$M$1413:$M$1415,$M$1994,$M$2319,$M$2322:$M$2323,$M$2327:$M$2329,$M$2385,$M$2884,$M$3049,$M$3130,$M$3192,$M$3242,$M$3287:$M$3288,$M$3406,$M$3418,$M$3423,$M$3610,$M$4001,$M$4008,$M$4104,$M$4145,$M$4374

我看过一些使用替换公式的帖子,但这可能是另一种情况:

  1. rng将在for循环的每次迭代中更改,因为应用了不同的过滤器

  2. rng.address方法无法捕获所有单元格:我可以在过滤后的Excel中看到$M$4374之后,此范围内有更多单元格。我使用MsgBox(rng.address)查看该范围内的所有单元格...有没有办法查看该范围内的所有单元格,或者rng.address是否有字符上限?

1 个答案:

答案 0 :(得分:0)

这解决了不使用ArrayFormula

的问题
Set rng = Range("M2:M" & Cells(Rows.Count, "M").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
 Set rng2 = rng.Offset(0, 1)
 rng2.FormulaR1C1 = "= RC[-1] + 2"