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

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

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那么没有错误,但结果是不正确的

一个Range.FormulaArray属性只能有255个字符,而你显示的是248个字符。有些错误types可能会超过限制。

 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 

正如我在评论中提到的那样,当将布尔条件语句相互相乘时, 双重一元运算符是不必要的。 math运算的行为使得布尔型数值转换成为可能。

备择scheme

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

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

可以生成自定义的数字格式代码 ,根本不显示零。 其中最简单的是,

 General;General;;@