2017-03-31 115 views
0

我想申請一個ARRAYFORMULA的過濾範圍 - 即增加2到每個細胞中的過濾設置rng並粘貼到結果的rng2相鄰小區 - 這樣的:Excel VBA中ARRAYFORMULA與過濾範圍太長

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會的每次迭代改變環路不同的過濾器是應用

  2. rng.address方法不會捕獲所有單元格:我可以看到在已過濾的excel中$M$4374之後,此範圍內有更多單元格。我用MsgBox(rng.address)來查看該範圍內的所有單元格......有沒有辦法查看該範圍內的所有單元格,還是有rng.address的字符上限?

+0

問題?我已經解決了類似的問題(特別是在數據驗證中),方法是選擇所需的所有單元格並將其標記爲「a」。 – Cyril

+0

您是否試圖將2添加到左側的單元格?爲什麼數組公式,爲什麼不只是'rng2.FormulaR1C1 =「= RC [-1] + 2」'? –

+0

@ScottCraner:很酷,非常感謝!我只是想着如何在Excel中做到這一點(與ArrayFormula),並試圖將其翻譯成VBA,但後來遇到了這個繁瑣的255字符限制。你的方法要容易得多! – SuperMartingale

回答

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"