运行时错误1004在vba中复制长arrays公式

我在Excel电子表格的单元格B2中有以下数组公式:

={IF(COUNT(IF(ISNUMBER(A30:A1000);IF(C30:C1000>A30:A1000-1;A30:A1000)))>=COUNT(IF(ISNUMBER(A30:A1000);IF(B30:B1000>A30:A1000-1;A30:A1000)));COUNT(IF(ISNUMBER(A30:A1000);IF(C30:C1000>A30:A1000-1;A30:A1000)));IF(COUNT(IF(ISNUMBER(A30:A1000);IF(C30:C1000>A30:A1000-1;A30:A1000)))<=COUNT(IF(ISNUMBER(A30:A1000);IF(B30:B1000>A30:A1000-1;A30:A1000)));COUNT(IF(ISNUMBER(A30:A1000);IF(B30:B1000>A30:A1000-1;A30:A1000)));COUNT(IF(ISNUMBER(A30:A1000);IF(C30:C1000>A30:A1000-1;A30:A1000)))))} 

现在我想使用下面的VBA代码将此代码复制到单元格A2:

 Sheets("Sheet1").Range("A2").FormulaArray = Sheets("Sheet1").Range("B2").Formula 

但是,当我使用此代码时,我得到运行时错误1004。

你有什么想法如何解决这个问题?

传递数组时,字符数限制为255

https://support.microsoft.com/en-us/kb/213181

为A30的A30:A1000设置命名范围,B30的B30:B1000命名范围,C30:C1000的D(C被保留,所以你不能使用它,CC也会使这个公式太长)(ctrl + f3打开命名的范围pipe理器,然后点击新的button)

然后改变你的公式使用命名的范围。

=IF(COUNT(IF(ISNUMBER(A),IF(D>A-1,A)))>=COUNT(IF(ISNUMBER(A),IF(B>A-1,A))),COUNT(IF(ISNUMBER(A),IF(D>A-1,A))),IF(COUNT(IF(ISNUMBER(A),IF(D>A-1,A)))<=COUNT(IF(ISNUMBER(A),IF(B>A-1,A))),COUNT(IF(ISNUMBER(A),IF(B>A-1,A))),COUNT(IF(ISNUMBER(A),IF(D>A-1,A)))))

或者,您可以设置自定义的VBA函数,这将允许您用较短的stringreplaceif语句中的重复代码,以将您带入255以下。但最终您需要获得255以下的代码。一旦在255以下,要么使用上面的更改,要么使用更短的数组公式。 (请注意,我将分号更改为逗号,因此如果您使用分号冒号,则可能需要将其更改回来)

我相信问题在于公式中的参考。 由于单元格B2引用了公式中的A30:A1000 ,所以当您将此应用于单元格A2它会尝试将引用一列移到左侧 – 它不能。 为了绕过这个,你可以使参考文献是绝对的:

 ={IF(COUNT(IF(ISNUMBER($A$30:$A$1000);IF($C$30:$C$1000>$A$30:$A$1000-1;$A$30:$A$1000)))>=COUNT(IF(ISNUMBER($A$30:$A$1000);IF($B$30:$B$1000>$A$30:$A$1000-1;$A$30:$A$1000)));COUNT(IF(ISNUMBER($A$30:$A$1000);IF($C$30:$C$1000>$A$30:$A$1000-1;$A$30:$A$1000)));IF(COUNT(IF(ISNUMBER($A$30:$A$1000);IF($C$30:$C$1000>$A$30:$A$1000-1;$A$30:$A$1000)))<=COUNT(IF(ISNUMBER($A$30:$A1000);IF(B30:B1000>A30:A$1000-1;$A$30:$A$1000)));COUNT(IF(ISNUMBER($A$30:$A$1000);IF($B$30:$B$1000>$A$30:$A$1000-1;$A$30:$A$1000)));COUNT(IF(ISNUMBER($A$30:$A$1000);IF($C$30:$C$1000>$A$30:$A$1000-1;$A$30:$A$1000)))))}