【问题标题】:Excel: How to negate a boolean array?Excel:如何否定布尔数组?
【发布时间】:2018-10-04 20:52:43
【问题描述】:

我想对数组使用“NOT”。即:

"NOT"((True, False, True)) = (False, True, False)

我想在 sumproduct 公式中使用这种技术,即

=SUMPRODUCT(($R$2:$R$9000=$W$5:$AF$5)*($S$2:$S$9000))

现在,我想使用否定数组,并且仍在寻找一个优雅的版本如何做到这一点。我试过了:

=SUMPRODUCT(NOT($R$2:$R$9000=$W$5:$AF$5)*($S$2:$S$9000))

=SUMPRODUCT(($R$2:$R$9000<>$W$5:$AF$5)*($S$2:$S$9000))

两者都没有像假设的那样工作。我知道我可以使用

=SUMPRODUCT(($R$2:$R$9000<>$W$5)*($R$2:$R$9000<>$X$5)*...*($R$2:$R$9000<>$AF$5)*($S$2:$S$9000))

但我希望有一个更优雅的版本。

你知道更优雅的答案吗?

许多问候, 彼得

【问题讨论】:

  • 你试过SUMIF吗?
  • 实际上,这似乎也不起作用... :-/
  • 实际上,我们忽略了明显的 - =SUM($R$2:$R$9000) - SUMPRODUCT(NOT($R$2:$R$9000=$W$5:$AF$5)*($S$2:$S$9000)),所以如果你已经有了 R 列的总数,只需从中扣除你的产品。
  • 是的,实际上 (sum - sumproduct) 是我现在“修复”它的方式。但是我需要在类似的数据库上执行一些其他 sumproducts 并且需要多次而不是只考虑一次代数......
  • 好吧,我想你可以(sum - (sumproduct + sumproduct + ...)),如果这就是你的意思......顺便说一句,这是一个很好的解决方案 - 使用逻辑来乘以值,非常优雅。如果 Microsoft 很快更改 True 的值,您就有麻烦了,但仍然 - 很好的解决方案! :o)

标签: arrays excel


【解决方案1】:

我自己希望有一个更优雅的解决方案,但我认为这是我迄今为止想到的最好的解决方案:--(&lt;bitmask&gt;)=0

在您的情况下,SUMPRODUCT(--(($R$2:$R$9000=$W$5:$AF$5)*($S$2:$S$9000))=0) 甚至 SUMPRODUCT((($R$2:$R$9000=$W$5:$AF$5)*($S$2:$S$9000))=0) 应该可以工作,因为 * 运算符已经将位掩码转换为整数。

这个想法是用--{TRUE,FALSE,TRUE} 位掩码转换为整数{1,0,1}。那么如果他们是FALSE (0),那么=0 比较的结果就是TRUE。如果TRUE (1),则结果为FALSE

如果您使用&lt;bitmask&gt;+&lt;bitmask&gt; 之类的东西来模拟逐元素OR,它应该仍然有效,因为TRUEs(总和)仍将>0。

这对你有用吗?

【讨论】:

  • 嗨 PKB,我试过 SUMPRODUCT(--(($R$2:$R$9000=$W$5:$AF$5)*($S$2:$S$9000))=0)结果为 0。我还尝试通过 SUMPRODUCT(--(($R$2:$R$9000=$W$5:$AF$5) =0)*($S$2:$S$9000)) 修复它。但这似乎只在简化的情况下有效。即 SUMPRODUCT(--(($R$2:$R$9000=$W$5:$W$5) =0)*($S$2:$S$9000))。否则,我或多或少会得到一笔总额。
  • 我认为第一个失败是因为 ($S$2:$S$9000) 的条目不在 0 和 1 中
猜你喜欢
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 2014-12-20
相关资源
最近更新 更多