这在 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)
这不起作用,因为条件(第二个参数)只能在简单条件中使用对列表元素的隐式引用(例如“>5”)
变体可能如下所示:
Total Citrus = SUM( IF(BITAND(C2:C5, 2) > 0, B2:B5) )
这几乎有效,但条件仅针对单元格 C2 进行测试,然后对总列表进行求和,或者不进行求和。
当然,我可以使用三个不同的列并用 1 和 0 填充它,但是根据我的实际情况进行缩放时,这会很糟糕。
最佳答案
您已使用 BITAND function² 创建了一个数组公式 1 。这些需要使用 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))
正确输入后,根据需要填写。
1 数组公式需要使用 Ctrl+Shift+Enter↵ 来完成。一旦正确输入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试将整列引用减少到更接近地代表实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将引用范围缩小到最小值。请参阅Guidelines and examples of array formulas了解更多信息。
² BITAND function²是随 Excel 2013 引入的。它在早期版本中不可用。
关于excel - 函数内的向量化(SUMIF 中条件的参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34712853/