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

Excel 运行时错误1004在vba中复制长数组公式,excel,vba,Excel,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(C

我在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)))))}
然而,当我使用这段代码时,我得到运行时错误1004


您知道如何解决此问题吗?

传递数组时字符限制为255

为A的a30:A1000、B的B30:B1000和D的c30:c1000设置命名范围(C是保留的,因此您不能使用它,CC也会使此公式过长)(ctrl+f3打开命名范围管理器,然后单击“新建”按钮)

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

=IF(如果(如果)计数(如果)如果(如果)数字(A),如果(D>A-1,A))>=COUNT(如果)计数(如果(如果)数字(A),如果(如果)(D>A-1,A)),如果(如果)计数(如果(如果)数字(A),如果(D>A-1,A)),计数(如果(如果)数字(A),如果(B>A-1,A)),计数(如果(如果)(如果(如果)数字(A),如果(如果(D>A-1,A))。


或者,您可以设置自定义VBA函数,使您能够用较短的字符串替换if语句中的重复代码,从而使您处于255以下。但最终你需要在255以下。一旦低于255,您的代码就可以正常工作,可以使用上面的更改,也可以使用更短的数组公式。(请注意,我将分号更改为逗号,因此如果使用分号,可能需要将其更改回原处)

传递数组时字符限制为255

为A的a30:A1000、B的B30:B1000和D的c30:c1000设置命名范围(C是保留的,因此您不能使用它,CC也会使此公式过长)(ctrl+f3打开命名范围管理器,然后单击“新建”按钮)

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

=IF(如果(如果)计数(如果)如果(如果)数字(A),如果(D>A-1,A))>=COUNT(如果)计数(如果(如果)数字(A),如果(如果)(D>A-1,A)),如果(如果)计数(如果(如果)数字(A),如果(D>A-1,A)),计数(如果(如果)数字(A),如果(B>A-1,A)),计数(如果(如果)(如果(如果)数字(A),如果(如果(D>A-1,A))。


或者,您可以设置自定义VBA函数,使您能够用较短的字符串替换if语句中的重复代码,从而使您处于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)))))}
(C$30美元:$C$1000美元$$1000美元$$1000美元$$$30$C$$1000$1000美元。$30$C$1000美元$30$30美元$30$A$1000美元1000元)()))))))))))))))))))))))))))))))))))))))))))))计数(如果(如果(如果(如果(如果(如果(如果(C$C$30美元(C$30美元(C$30$30$30$30$30$30$30$A$A$A$30$30$A$A$A$30$30美元$30$30$30$30美元$30美元$30美元$30美元$$30美元$30美元$30美元$30美元$$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元美元30美元:1000澳元)A30:A$1000-1;$A$30:$A$1000));计数(如果(ISNUMBER($A$30:$A$1000);如果($B$30:$B$1000>A$30:$A$1000-1;$A$30:$A$1000));计数(如果(ISNUMBER($A$30:$A$1000);如果($C$30:$C$1000>A$30:$A$A$1000:$A$A$1000-1;$A$A$30:$A$A$A$1000()))})
我认为问题在于公式中的引用。当单元格
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)))))}
(C$30美元:$C$1000美元$$1000美元$$1000美元$$$30$C$$1000$1000美元。$30$C$1000美元$30$30美元$30$A$1000美元1000元)()))))))))))))))))))))))))))))))))))))))))))))计数(如果(如果(如果(如果(如果(如果(如果(C$C$30美元(C$30美元(C$30$30$30$30$30$30$30$A$A$A$30$30$A$A$A$30$30美元$30$30$30$30美元$30美元$30美元$30美元$$30美元$30美元$30美元$30美元$$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元$30美元美元30美元:1000澳元)A30:A$1000-1;$A$30:$A$1000));计数(如果(ISNUMBER($A$30:$A$1000);如果($B$30:$B$1000>A$30:$A$1000-1;$A$30:$A$1000));计数(如果(ISNUMBER($A$30:$A$1000);如果($C$30:$C$1000>A$30:$A$A$1000:$A$A$1000-1;$A$A$30:$A$A$A$1000()))})
是否希望范围保持不变?e、 g.
A30:A1000
即使对于
范围(“A2”)
中的公式?是的,它们需要完全处于相同的长度。是否希望范围保持不变?e、 g.
A30:A1000
即使对于
范围(“A2”)
中的公式?是的,它们的长度必须完全相同。