SUMPRODUCT() 处理 excel 中的数组

SUMPRODUCT() handling arrays in excel

我有三个数组 A、B 和 A - B = C。它们被分成列并按 excel 格式化,例如:

A, B, C, A, B, C, A, B, C... D, E

我想对所有 C>0 = D 求和,对所有 C<0 = E 求和。问题是为了便于人类阅读,C 被分解了,所以我只想每隔三列调用一次。

我的解决方案:

根据给定方法的变体 and here,以及一个简单的数据测试数组:

    1    0   1   1
    1    1   0   1
   -1   -1  -1   1
    0   -1  -1   0
   -1   -1   1   0
    1    1   0   1

我将取出偶数列并进行条件求和:

=SUMPRODUCT((MOD(COLUMN(A1:D1),2)=0)*(A1:D1>0),A1:D1)
=SUMPRODUCT((MOD(COLUMN(A1:D1),2)=0)*(A1:D1<0),A1:D1)

产生正确的结果:

    1  0
    2  0
    1 -1
    0 -1
    0 -1
    2  0

但我完全不明白为什么 这行得通。一方面,我没有输入双重否定 (--),所以在得到 "TRUE" 或 "FALSE" 值时,公式应该向我吐出一个错误。另一方面,即使我不是 运行 它作为 excel 中的 CSE 数组函数,它也能正常工作。我得到最少的部分是 SUMPRODUCT().

的论据

MOD() 只是作为我得到的条件过滤器,但我不明白它是如何处理 A1:D1 当它从 COLUMN 得到的只是一个数字时。 COLUMN(A1:D1) 只是 returns excel 中的单个标量值,范围中的第一列,在本例中为 1。如何将其转换为所需的数组 [1, 3],尤其是因为我没有使用 CSE?

SUMPRODUCT 自然是一个数组类型的公式,这就是您不需要 CSE 的原因:

=SUMPRODUCT(A1:A6,B1:B6)

这将迭代并执行 A1*B1+A2*B2+...

所以使用这个功能我们可以做:

=SUMPRODUCT((MOD(COLUMN(A1:D1),2)))

这将遍历列和 return:2 MOD(1,2)+MOD(2,2)+...

您不需要双一元 (--) 的原因是因为表达式中有 *。对布尔值 (TRUE/FALSE) 进行的任何数学运算都会将其转换为位 (1/0)。

---1 * -1 *

的简写

如果您这样做,您将需要 --

=SUMPRODUCT(--(MOD(COLUMN(A1:D1),2)=0),--(A1:D1>0),A1:D1)

因此,您最终会将一系列 1 和 0 与 A1:D1 中的系列相乘。

当任何一个为假时,它将 return 0 和 0 次任何东西都是 0。

因此只有当两者都为 TRUE 或 1 时,相应单元格中的值才会添加到迭代和中。