运行时错误1004复制公式数组

时间:2016-06-24 07:36:19

标签: excel vba excel-vba excel-formula

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

您的数组公式太长,无法像Range.FormulaArray property那样传递。

您无需继续重复所有条件。当您在第30行到第1000行之间循环时,如果第一个或第二个条件失败,则不会处理该循环的公式的其余部分。公式中的IF在第一个FALSE处停止处理。

=IF(COUNT(IF(ISNUMBER(A30:A1000), IF(B30:B1000>A30:A1000-1, A30:A1000)))>=COUNT(B30:B1000>A30:A1000-1,A30:A1000),COUNT(B30:B1000>A30:A1000-1,A30:A1000))

现在代码工作得很好。

With Worksheets("Sheet3")
    .Range("A2").FormulaArray = .Range("b2").Formula
End With

请注意,我无法使用分号作为系统列表分隔符对此进行测试;只有我自己的系统的逗号。 VBA对.Formula.FormulaR1C1.FormulaArray属性中的EN-US区域设置不喜欢任何内容。如果仍然有问题,请使用debug,print查看如何返回.Formula。如果它包含分号,那么使用,

With Worksheets("Sheet3")
    .Range("A2").FormulaArray = Replace(.Range("b2").Formula, Chr(59), Chr(44))
End With