【问题标题】:FormulaArray throws an error with correct array formulaFormulaArray 使用正确的数组公式引发错误
【发布时间】:2018-02-02 18:04:35
【问题描述】:

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    改变

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

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

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

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

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

    【讨论】:

    • 我用的是俄语公式,只是假设你找到的所有;实际上都是 ^^'。我的公式实际上看起来像这样"=ЕСЛИ(" & АдресТекущий & ">0;1;0)"
    • 使代码对我来说完美运行的更改。在 VBA 中,您应该像以前一样使用英文公式名称(“IF”)和“,”作为公式分隔符(我在 excel 中也有波兰语 excel 和“;”作为分隔符 :))
    • 您应该更改您评论的答案,我会接受它,我只是使用了英文公式并且它有效,公式分隔符最终不是问题。
    • @tomjohnriddle 是对的。当您使用 VBA 时,您的公式必须是英文的。如果您想使用您的语言公式,请检查属性FormulaLocal
    • @FoxfireAndBurnsAndBurns +1 我会使用FormulaLocal,但我需要一个数组公式。
    猜你喜欢
    • 2019-04-11
    • 2013-01-10
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    相关资源
    最近更新 更多