我有一段代码将数组公式放在一个范围内。它抛出运行时错误: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
,则没有错误,但结果不正确
答案 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";