我有一组文本字符串,每个字符串都有一个关联的数值。我需要对那些“符合条件”的条目的相关数值进行求和。文本条目通过包含一个或多个指定的目标字符串来符合条件。条目可能包含多个目标字符串,或包含多个目标字符串。但是,如果条目通过包含与任何目标或目标组合的任何匹配项来符合条件,我只想对条目的相关值进行一次求和。
例如,假设单元格 A1:A3 分别包含apple
、banana
、pear
,而 B1:B3 分别包含数字1
。我的搜索目标是a
和p
。所有三个文本条目都符合条件,因为它们每个都包含至少一个目标的至少一个实例。将 B 列中的相关值相加应返回结果3
。
我尝试使用 SUMIF 和通配符目标来实现此目的。此示例的公式为:
=SUM(SUMIF(A:A, {"*a*", "*p*"}, B:B))
但是,这会重复计算与多个目标匹配的条目。在本例中,所有三个都包含a
,并且两个也包含p
,因此总和为5
。
我怎样才能实现这一目标而不重复计算条目?
答案1
将条件置于工作表内的实际单元格中而不是硬编码在公式中更加灵活。
如果你使用垂直的,连续的单元格区域(例如H1:H2
)到此结束,并假设范围是垂直的范围,你可以使用这个数组公式**:
=SUM(IF(MMULT(0+ISNUMBER(SEARCH(TRANSPOSE(Criteria),Range)),ROW(Criteria)^0)>0,Values))
如果您坚持在公式中加入标准,那么:
=SUM(IF(MMULT(0+ISNUMBER(SEARCH({"p","a"},Range)),{1;1})>0,Values))
问候
答案2
这是一个相对简单的解决方案。关联值全部为1
,它会产生所需的结果3
,但我分配了不同的值以证明选择了正确的值,并包含了一个不匹配的条目以便进行更好的衡量。
条目列表在 C 列中,其关联值在 D 列中。结果在 E1 中。
只有某些函数可以使用通配符,因此这将使用 SEARCH 来查找目标字符串。
处理多个 OR 条件的典型方法是将每个测试的结果相加。但是,当项目可以满足多个条件时,这种方法会重复计算。为了解决这个问题,需要检查聚合条件测试以查看总和是否大于零,然后将该值与相关值一起使用。
将目标搜索字符串作为数组处理会变得很复杂,因为用于此类公式的常用函数会先计算整个数组的结果,然后再将其应用于下一个术语。因此,我分别处理了每个条件。要获得更多条件,只需在测试ISNUMBER(SEARCH("target",range))
前的括号内为每个条件添加另一个条件即可>0
。
SUMPRODUCT 使用普通的非数组公式进行数组样式计算。
E1中的公式为:
=SUMPRODUCT(((ISNUMBER(SEARCH("p",C1:C4))+ISNUMBER(SEARCH("a",C1:C4)))>0)*D1:D4)
答案3
我真的以为这是一个SUMPRODUCT(--
公式,但我无法让它发挥作用。不过这个应该可行 -
=SUM(IF(FREQUENCY(IF(NOT(ISERR(SEARCH({"d","g"},A2:A10))),ROW(A2:A10)),ROW(A2:A10))>0,1))
其中 将{"d","g"}
是您的搜索字符串数组。
这是一个数组公式,因此一旦输入它,就必须点击ctrl++ shft,entr然后花括号就会出现在整个函数周围的公式栏中。
请注意,只有当您搜索单个列时它才会起作用。
考虑到通配符,这种方法可能不太管用。也许正则表达式才是你需要的?