Excel 具有两个值的 sumif 抛出错误
Excel sumifs with two values throwing an error
如果 A 是 abc
或 cba
并且 B 是 def
:
,我正在尝试获取 C 列的总和
=SUMIFS(C2:C51;A2:A51;{"abc","cba"};B2:B51;"def")
但是公式无效,不确定我的错误在哪里,因为这是在快速 google 搜索中提出的。
感谢您的建议。
该公式对我有效,但这可能与您的分隔符有关。根据您的 excel、windows 或位置设置,您可能需要使用逗号 ,
作为分隔符,而不是分号 ;
.
至于你的公式,为了完成,我做了同样的 google 搜索并以 this reference 结束。看起来你在公式中的逻辑是正确的,除了一个关键步骤,SUM(
环绕你的公式。这意味着如果您的公式有效,它只会考虑第一次命中,但对于总和,它会计算您的逻辑为 True
的每个条目。语法:
=SUM(SUMIFS(C2:C51,A2:A51,{"abc","cba"},B2:B51,"def"))
或分号分隔:
=SUM(SUMIFS(C2:C51;A2:A51;{"abc";"cba"};B2:B51;"def"))
由于 {array} 选项似乎不适合您,我提出如下解决方法:
=SUMIFS(C1:C15;A1:A15;"abc";B1:B15;"def")+SUMIFS(C1:C15;A1:A15;"cba";B1:B15;"def")
这是一个更笨重的函数,但通过将数据拆分为两个 SUMIFS(
函数并将结果相加得到相同的结果。
可能我会使用@Plutian 的答案(实际上我赞成),但如果它可能对你有用,你可以使用 SUMPRODUCT 结合 DOUBLE UNARY 来得到你想要的。
我做了一个这样的假数据集:
如您所见,只有突出显示的值符合您的要求(如果A=abc OR cba AND B=def
)
我的E10公式是:
=SUMPRODUCT(--($A:$A="abc")+--($A:$A="cba");--($B:$B="def");$C:$C)
这是它的工作原理:
如果满足条件,($A:$A="abc")
将 return 一个 True/False
值的数组。
- 该数组,因为它在双一元运算符
--( your range )
内,会将所有 True/False
值转换为 1 or 0
值。假设它的工作原理就像您选择了仅包含 1 或 0 的单元格范围。因此在这种情况下,这将 return 一个类似于 {1,0,1,0,1,0}
的数组
--($A:$A="cba")
将再次执行与步骤 1 或 2 完全相同的操作,但使用您的第二个选项。它将 return 另一个值数组,在这种情况下,{0,1,0,1,0,1}
--($A:$A="abc")+--($A:$A="cba")
我们只是对两个数组求和,所以 {1,0,1,0,1,0}+{0,1,0,1,0,1}={1,1,1,1,1,1}
--($B:$B="def")
将按照您的第三个条件再次执行第 1 步和第 2 步,并且 return 另一个数组,现在它将是 {1,0,1,0,0,1}
- 将第5步得到的数组乘以第4步得到的数组,所以我们做
{1,1,1,1,1,1} * {1,0,1,0,0,1}={1,0,1,0,0,1}
- 现在,在第 7 步中获得的最终数组将乘以单元格
$C:$C
的 值 ,因此在本例中为 {1,0,1,0,0,1} * {10,1,10,1,1,10} = {10,0,10,0,0,10}
- 最后一步,我们将上一步获得的数组中的所有值相加,所以我们做
10+0+10+0+0+10=30
我已经解释了每一步以确保每个人都能理解,因为 SUMPRODUCT 它真的是一个有用的函数,如果你知道如何处理(我是一个菜鸟,但我在这里看到真正的英雄使用这个功能)。
使用 SUMPRODUCT 而不是 SUMIFS 的优点是您可以轻松添加更多条件以应用相同范围(案例 --($A:$A="abc")+--($A:$A="cba")
或将单个条件应用到其他范围(案例 --($B:$B="def")
)。
对于普通的 SUMIFS,您可能必须为同一范围内应用的每个条件添加 1 个额外的完整 SUMIF。
希望对您有所帮助
如果 A 是 abc
或 cba
并且 B 是 def
:
=SUMIFS(C2:C51;A2:A51;{"abc","cba"};B2:B51;"def")
但是公式无效,不确定我的错误在哪里,因为这是在快速 google 搜索中提出的。
感谢您的建议。
该公式对我有效,但这可能与您的分隔符有关。根据您的 excel、windows 或位置设置,您可能需要使用逗号 ,
作为分隔符,而不是分号 ;
.
至于你的公式,为了完成,我做了同样的 google 搜索并以 this reference 结束。看起来你在公式中的逻辑是正确的,除了一个关键步骤,SUM(
环绕你的公式。这意味着如果您的公式有效,它只会考虑第一次命中,但对于总和,它会计算您的逻辑为 True
的每个条目。语法:
=SUM(SUMIFS(C2:C51,A2:A51,{"abc","cba"},B2:B51,"def"))
或分号分隔:
=SUM(SUMIFS(C2:C51;A2:A51;{"abc";"cba"};B2:B51;"def"))
由于 {array} 选项似乎不适合您,我提出如下解决方法:
=SUMIFS(C1:C15;A1:A15;"abc";B1:B15;"def")+SUMIFS(C1:C15;A1:A15;"cba";B1:B15;"def")
这是一个更笨重的函数,但通过将数据拆分为两个 SUMIFS(
函数并将结果相加得到相同的结果。
可能我会使用@Plutian 的答案(实际上我赞成),但如果它可能对你有用,你可以使用 SUMPRODUCT 结合 DOUBLE UNARY 来得到你想要的。
我做了一个这样的假数据集:
如您所见,只有突出显示的值符合您的要求(如果A=abc OR cba AND B=def
)
我的E10公式是:
=SUMPRODUCT(--($A:$A="abc")+--($A:$A="cba");--($B:$B="def");$C:$C)
这是它的工作原理:
-
如果满足条件,
($A:$A="abc")
将 return 一个True/False
值的数组。- 该数组,因为它在双一元运算符
--( your range )
内,会将所有True/False
值转换为1 or 0
值。假设它的工作原理就像您选择了仅包含 1 或 0 的单元格范围。因此在这种情况下,这将 return 一个类似于{1,0,1,0,1,0}
的数组 --($A:$A="cba")
将再次执行与步骤 1 或 2 完全相同的操作,但使用您的第二个选项。它将 return 另一个值数组,在这种情况下,{0,1,0,1,0,1}
--($A:$A="abc")+--($A:$A="cba")
我们只是对两个数组求和,所以{1,0,1,0,1,0}+{0,1,0,1,0,1}={1,1,1,1,1,1}
--($B:$B="def")
将按照您的第三个条件再次执行第 1 步和第 2 步,并且 return 另一个数组,现在它将是{1,0,1,0,0,1}
- 将第5步得到的数组乘以第4步得到的数组,所以我们做
{1,1,1,1,1,1} * {1,0,1,0,0,1}={1,0,1,0,0,1}
- 现在,在第 7 步中获得的最终数组将乘以单元格
$C:$C
的 值 ,因此在本例中为{1,0,1,0,0,1} * {10,1,10,1,1,10} = {10,0,10,0,0,10}
- 最后一步,我们将上一步获得的数组中的所有值相加,所以我们做
10+0+10+0+0+10=30
我已经解释了每一步以确保每个人都能理解,因为 SUMPRODUCT 它真的是一个有用的函数,如果你知道如何处理(我是一个菜鸟,但我在这里看到真正的英雄使用这个功能)。
使用 SUMPRODUCT 而不是 SUMIFS 的优点是您可以轻松添加更多条件以应用相同范围(案例 --($A:$A="abc")+--($A:$A="cba")
或将单个条件应用到其他范围(案例 --($B:$B="def")
)。
对于普通的 SUMIFS,您可能必须为同一范围内应用的每个条件添加 1 个额外的完整 SUMIF。
希望对您有所帮助