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