【问题标题】:SUMPRODUCT() handling arrays in excelSUMPRODUCT() 在 excel 中处理数组
【发布时间】:2017-09-26 21:06:59
【问题描述】:

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

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

我想对所有 C>0 = D 求和,并且对所有 C

我的解决方案:

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

    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) 只返回 excel 中的单个标量值,即范围中的第一列,在本例中为 1。如何将其转换为所需的数组 [1, 3],尤其是因为我没有使用 CSE?

【问题讨论】:

标签: arrays excel sum range conditional


【解决方案1】:

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

=SUMPRODUCT(A1:A6,B1:B6)

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

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

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

这将遍历列并返回: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 中的系列相乘。

当其中任何一个为假时,它将返回 0 和 0 次任何为 0。

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

【讨论】:

  • 啊哈,谢谢。我不知道函数本身可以是 CSE(仅使用 excel 大约一周)。并且看到将 sumproduct 写成 3 个参数可以更加更清楚发生了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
相关资源
最近更新 更多