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

时间:2016-06-24 10:45:38

标签: excel excel-vba vba

我的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。

你知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

传递数组时

字符限制为255 ...

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

设置A30的命名范围:A的A30,B30的B30:B1000,以及D的c30:c1000(C保留,因此您无法使用它,CC也会使此公式过长)( ctrl + f3打开命名范围管理器,然后点击新按钮)

然后更改公式以使用命名范围。

=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函数,这些函数允许您使用较短的字符串替换if语句中的重复代码,以使您低于255.但最终您需要得到255以下。一旦低于255,您的代码工作正常,无论是我上面的更改还是更短的数组公式。 (请注意,我将分号更改为逗号,因此如果使用分号,可能需要将其更改回来)

答案 1 :(得分:0)

我认为问题在于公式中的参考。由于单元格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)))))}