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

时间:2016-01-11 01:28:59

标签: excel excel-formula vlookup excel-2013

这在C ++,Python,R等中是微不足道的。但Excel正在努力。在网络上一遍又一遍地有相同的简单例子。我找不到任何解决这个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)

这不起作用,因为条件(第二个参数)只能在简单条件中使用对列表元素的隐式引用(例如“&gt; 5”)

变体可能如下所示:

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

这几乎可以工作,但条件只针对单元格C2进行测试,然后对总列表进行求和。

当然我可以使用三个不同的列并用1和0填充它,但是根据我的实际情况进行缩放会很糟糕。

1 个答案:

答案 0 :(得分:2)

您已使用BITAND function²创建了数组公式¹。这些需要使用 Ctrl + Shift + Enter↵完成,而不是简单地Enter↵。正确输入后,Excel将在公式周围添加大括号(例如 {} )。你不要自己打字。

在E7中,

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

正确输入后,请根据需要填写。

BITAND_array

¹数组公式需要用 Ctrl + Shift + Enter↵完成。一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试并减少对更接近表示实际数据范围的范围的全列引用。数组公式以对数方式计算计算周期,因此将参考范围缩小到最小值是一种好习惯。有关详细信息,请参阅Guidelines and examples of array formulas

² {2013}引入了BITAND function²。它在早期版本中不可用。