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

标签 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)

这不起作用,因为条件(第二个参数)只能在简单条件中使用对列表元素的隐式引用(例如“>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))

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

         BITAND_array


1 数组公式需要使用 Ctrl+Shift+Enter↵ 来完成。一旦正确输入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试将整列引用减少到更接近地代表实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将引用范围缩小到最小值。请参阅Guidelines and examples of array formulas了解更多信息。

² BITAND function²是随 Excel 2013 引入的。它在早期版本中不可用。

关于excel - 函数内的向量化(SUMIF 中条件的参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34712853/

相关文章:

excel - 有没有办法在 MS Excel 中找出 4 个单元格的值相同或不同

vba - 哪个 Excel 公式可以在没有 VBA UDF 的情况下执行此操作?

awk - 在 bash 脚本中使用 awk 进行 vlookup 功能

excel - 使用 vlookup 从 Sheet2 读取 Sheet1 上的值

VBA 复制和转置数据范围

php - 如何在 PHP 中计算 Excel 中的实际值,如 1.30389E+15?

excel - Symfony 返回导出 excel 的响应

sql-server - T-SQL 相当于 Excel "MAX"函数,返回两个数字中较大的一个

excel - 如何根据字符大写为单元格着色?

vlookup 查找匹配项并返回行中的另一个元素