FormulaArray使用正确的数组公式抛出错误

时间:2018-02-02 09:37:07

标签: vba excel-vba excel

MyData.Columns("R").Address$R$10:$R$121
AddressCurr$D$10:$D$121 AddressPr$O$10:$O$121 MyData.Columns(5).Address$E$10:$E$121

AddressPr = MyData.Columns("O").Address
AddressCurr = MyData.Columns("D").Address
MyData.Columns("R").FormulaArray _
    = "=IF(" & AddressCurr & ">0;1;0)"

第三行抛出:
运行时错误'1004'无法设置范围类的公式阵列属性

每当我在纸张上手动输入公式=IF($D$10:$D$121>0,1,0)时,它就会按预期工作。

为什么在使用正确的数组公式填充范围时,运行时错误会不断弹出?

注意:此公式是较大的=ROUND($O$10:$O$121/IF($D$10:$D$121=0,1,$D$10:$D$121)*$E$10:$E$121,-1)

的一部分
MyData.Columns("R").FormulaArray _
    = "=" & AddressPr & "/" & _
            "IF(" & AddressCurr & "=0,1," & AddressCurr & ")*" & _
            "" & MyData.Columns(5).Address & ""

它也会抛出错误。

相反,下面的公式就像一个魅力:

MyData.Columns("R").FormulaArray _
    = "=" & AddressPr & "/" & _
        "" & AddressCurr & "*" & _
        "" & MyData.Columns(5).Address & ""

我的猜测是它不能形成一个布尔数组,但是跟随也不能用于ROUND

1 个答案:

答案 0 :(得分:2)

更改

MyData.Columns("R").FormulaArray = "=IF(" & AddressCurr & ">0;1;0)"

MyData.Columns("R").FormulaArray = "=IF(" & AddressCurr & ">0,1,0)"

在VBA中,即使Excel中有不同的分隔符,也应使用,作为分隔符。

另外,请注意,在使用.Formula或.FormulaArray时,您应该在VBA中使用英文公式名称而不是本地公式名称。

如果你想使用你的本地语言公式,你可以使用.FormulaLocal,但似乎没有.FormulaLocal的数组版本(间接解决方案:How to combine FormulaArray and FormulaLocal options in Excel VBA?)。请注意,使用.FormulaLocal需要您使用本地分隔符。