我的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。
你知道如何解决这个问题吗?
答案 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)))))}