函数内的vector化(SUMIF中的条件参数)

这在C ++,Python,R等中是微不足道的。 但是Excel正在努力工作。networking上有很多本质上相同的简单例子, 我无法find任何东西来解决SUMIF / COUNTIF的这个应用程序。

我有一个项目列表,用一个类别位标记来标记每个项目:

...... A ............. B .... C 1 |Item ........... # ... Flag 2 | Apples ....... 20 ... 1 3 | Oranges .... 30 ... 3 4 | Lemon ........40 ... 7 5 | School Bus .. 5 ... 4 

在这里,使用EXCEL函数BITAND:

 -- BITAND( < flag >, 1) is non-zero for fruit, -- BITAND( < flag >, 2) is non-zero for citrus, -- BITAND( < flag >, 4) is non-zero for yellow, 

我需要做这样的事情:

 Total Citrus = SUMIF(C2:C5, BITAND(C2:C5, 2) > 0, B2:B5) 

这是行不通的,因为条件(第二个参数)只能在一个简单的条件中使用对列表元素的隐式引用(例如“> 5”)

变化forms可能如下所示:

 Total Citrus = SUM( IF(BITAND(C2:C5, 2) > 0, B2:B5) ) 

这几乎可以工作,但条件只对单元格C2进行testing,然后对总表进行求和或不求和。

当然,我可以使用三个不同的列,并填充1和0,但根据我的实际情况,这将是可怕的。

您已经使用BITANDfunction2创build了一个数组公式1。 这些需要使用Ctrl + Shift + Enter 键来完成,而不是简单地按Enter键 。 一旦input正确,Excel将在公式中添加大括号(例如{} )。 你不要自己input。

在E7中,

 =SUM(IF(SIGN(BITAND($C$2:$C$5, VLOOKUP(D7, $G$2:$H$5, 2, FALSE))), $B$2:$B$5)) 

input正确后,根据需要填写。

BITAND_array


¹ 数组公式需要使用Ctrl + Shift + Enter 来完成。 一旦正确input第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。 尝试和减less您的全列引用范围更接近代表实际数据的范围。 数组公式将计算周期对数化,所以最好将参考范围缩小到最小。 有关更多信息,请参阅数组公式的示例 。

²BITANDfunction ² 在Excel 2013中引入,在早期版本中不可用。