Range.FormulaArray在特定情况下导致错误

时间:2016-03-10 16:11:30

标签: arrays excel vba range formula

我有一段代码将数组公式放在一个范围内。它抛出运行时错误:1004"无法设置Range类的FormulaArray属性"。但是当我在单元格中粘贴相同的公式并按Ctrl + Shift + Enter所有内容时工作正常。

strFormula = "=IF(SUM(--(A2=Data!$A$2:$A$1423)*--(B2=YEAR(Data!$B$2:$B$1423))*  --(C2=MONTH(Data!$B$2:$B$1423)) * (Data!$E$2:$E$1423))=0,TEXT(,),SUM(--(A2=Data!$A$2:$A$1423)*--(B2=YEAR(Data!$B$2:$B$1423))*  --(C2=MONTH(Data!$B$2:$B$1423)) * (Data!$E$2:$E$1423)))"

shtAbsoluteData.Range("D2").FormulaArray  = strFormula

插入IF条件时会出现问题。因此,如果没有IF,以下代码可以正常工作:

strFormula = "=SUM(--(A2=Data!$A$2:$A$1423)*--(B2=YEAR(Data!$B$2:$B$1423))*  --(C2=MONTH(Data!$B$2:$B$1423)) * (Data!$E$2:$E$1423))"

shtAbsoluteData.Range("D2").FormulaArray = strFormula

注意:如果我使用shtAbsoluteData.Range("D2").Formula,则没有错误,但结果不正确

2 个答案:

答案 0 :(得分:1)

Range.FormulaArray property只能有255个字符而你的字符显示为248.一些错误类型可能会超过限制。

strFormula = "=IF(SUM((A2=Data!$A$2:$A$1423)*" & _
                     "(B2=YEAR(Data!$B$2:$B$1423))*" & _
                     "(C2=MONTH(Data!$B$2:$B$1423))*" & _
                     "(Data!$E$2:$E$1423))," & _
                 "SUM((A2=Data!$A$2:$A$1423)*" & _
                     "(B2=YEAR(Data!$B$2:$B$1423))*" & _
                     "(C2=MONTH(Data!$B$2:$B$1423))*" & _
                     "(Data!$E$2:$E$1423))," & _
                 "TEXT(,))"   '<~~ 226 characters
shtAbsoluteData.Range("D2").FormulaArray = strFormula

正如我在评论中提到的,当将布尔条件语句相互相乘时,double-unary运算符不是必需的。数学运算的行为使布尔数值转换。

<强> Alternatives

在此工作表的Excel选项,高级,显示选项中,您可以关闭在零值单元格中显示零。

任何会计数字格式都会显示连字符代替零值。

可以生成自定义Number Format Code,根本不显示零。其中最简单的是,

General;General;;@

答案 1 :(得分:0)

我遇到了同样的问题。我要解决的问题是先声明范围对象,然后在范围上使用.FormulaArray。

使用C#:

Microsoft.Office.Interop.Excel.Range eRange = wks.Range[wks.Cells[1,1], wks.Cells[20, 20]];
eRange.FormulaArray = $@"=some formula";