Excel:如何否定布尔数组?

时间:2018-04-24 14:33:08

标签: arrays excel

我想使用" 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))

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

你知道一个更优雅的答案吗?

许多问候, 彼得

1 个答案:

答案 0 :(得分:0)

我本人希望为此提供更优雅的解决方案,但我认为这是迄今为止我认为最好的解决方案:--(<bitmask>)=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}位掩码转换为整数--。然后,如果它们是FALSE0),则=0比较的结果是TRUE。如果为TRUE1),则结果为FALSE

如果您使用<bitmask>+<bitmask>之类的东西来模拟逐个元素的OR,则它应该仍然有效,因为TRUE(总和)仍为> 0。

对您有用吗?