【问题标题】:ArrayFormula works only on the first row with Indirect()ArrayFormula 仅适用于 Indirect() 的第一行
【发布时间】:2018-10-26 13:46:33
【问题描述】:

目标是将计算(Y4:Y-(W4:W*V4:V))+S4:S-T4:T) 应用于列的单元格,并留下0,其中相关行中的V 单元格为blank0注意:计算本身并不重要。

当第一行的V 列是0blank 时,下面的公式仅将0 应用于受影响的第一行,但该列的其余部分保持空白。

但是,如果检查V 单元格的条件针对第一行返回FALSE(意味着相关行中的V 单元格的数量非零),则整个列都会应用适当的计算结果在每一行。

=ARRAYFORMULA(
    IF(
        OR(
            ISBLANK(INDIRECT("V" & ROW())),
            EQ(INDIRECT("V" & ROW()), 0)
        ),
        0,
        (Y4:Y-(W4:W*V4:V))+S4:S-T4:T
    )
)

即使第一行的条件将V 单元格评估为0blank,如何修改公式以便填充列的其余部分?

【问题讨论】:

    标签: google-sheets


    【解决方案1】:

    你的公式有两个问题:

    1. 您不能在 arrayformula。这在此处进行了描述 https://productforums.google.com/forum/#!topic/docs/dl_9H6hFwaE.

    2. 测试0blank 可以用一个逻辑表达式来完成,比如 C1=0EQ(C1,0) ,如果 C1 是,两者都将返回 true 0 或空白。 (请注意,这使得很难测试一个单元格 包含 0,但不包含空白)。看这里https://support.microsoft.com/en-au/help/214244/xl-how-to-create-a-formula-to-correctly-evaluate-blank-cells

    我不知道你为什么要使用 INDIRECT,但是这个公式应该可以满足你的需要:

    =ARRAYFORMULA(if( eq(V4:V,0),0, (Y4:Y-(W4:W*V4:V))+S4:S-T4:T))
    

    我们删除了逻辑 OR(这会杀死数组公式)。

    我们已经删除了空白和0的冗余测试;

    【讨论】:

    • 成功了。感谢您分解失败原因以及检查blank0 单元格的改进说明。至于使用INDIRCET,我在想它应该被用来处理同一行中受尊敬的单元格,即使在ArrayFormula 中也是如此。现在我删除了INDIRECT,我去掉了其余由零填充的列,其中公式中使用的先前列没有数量。毕竟,为什么INDIRECT 会在列的其余单元格中生成所有0
    • 关于在ArrayFormula 中使用聚合函数为什么它可以在同一张表上工作,而它有AND=ARRAYFORMULA(IF(AND(ISNUMBER(S4:S),ISBLANK(V4:V)),S4:S-T4:T,Z4:Z+(S4:S-T4:T)))
    • 老实说,我不知道AND 为什么它在这种情况下有效。这可能只是幸运的情况。我能给出的最好建议是,如果文档提供了一个不能可靠地使用undefined behaviour 的聚合公式列表(可能是ARRAYFORMULA),那么最好不要这样做,而是使用提供的解决方法。 “未定义的行为”是所有计算机语言中的一个概念,您可以查找它。
    • 感谢您的详细说明。
    猜你喜欢
    • 1970-01-01
    • 2015-12-09
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多