Excel公式问题,A2单元格有选项是a、A3单元格选项是b;B2单元格值是5,B3单元格值是10。D2单元格值是a,b,请在E2单元格计算B列的值,这种包含关系的条件求和用什么公式?推荐公式:
excel
=SUMPRODUCT((ISNUMBER(FIND(","&$A$2:$A$3&",",","&D2&",")))*($B$2:$B$3))公式解释:
","&D2&"," - 在D2值前后加逗号,变成,a,b,,确保完全匹配
","&$A$2:$A$3&"," - 同样在A列值前后加逗号
FIND() - 查找A列值是否在D2中
ISNUMBER() - 判断是否找到(找到返回数字,否则返回错误)
SUMPRODUCT() - 符合条件的对应B列值相乘并求和
示例验证:
A2:A3 = a, b
B2:B3 = 5, 10
D2 = a,b
结果:E2 = 15 (5+10)
注意事项:
如果A列有更多数据,调整范围 $A$2:$A$3 和 $B$2:$B$3
公式区分大小写,如果不需要区分大小写,用 SEARCH 代替 FIND
确保D2中的值用逗号分隔且没有空格
这样无论D2是 a,b、b,a 还是只包含 a 或 b,都能正确计算对应的B列值之和。
求和用sumproduct,那包含关系的条件查找并去重的问题怎么解决呢?
推荐公式(Excel 365/2021):
excel
=TEXTJOIN(",", TRUE, UNIQUE(FILTER($B$2:$B$3, ISNUMBER(FIND($A$2:$A$3, D2))), FALSE))公式解释:
FIND($A$2:$A$3, D2) - 查找A列每个值是否在D2中
ISNUMBER() - 转换为布尔值(TRUE/FALSE)
FILTER($B$2:$B$3, ...) - 筛选出符合条件的B列值
UNIQUE(..., FALSE) - 去除重复值(FALSE表示按列去重)
TEXTJOIN(",", TRUE, ...) - 用逗号连接不重复的值
示例验证:
A2:A3 = a, b
B2:B3 = M, M
D2 = a,b
结果:E2 = M (去重后只有一个"M")
其他解决方案:
方案2(老版本Excel,数组公式):
excel
=IFERROR(INDEX($B$2:$B$3, MATCH(0, COUNTIF($E$1:E1, $B$2:$B$3) + IF(ISNUMBER(FIND($A$2:$A$3, $D$2)), 0, 1), 0)), "")
注意:这是一个数组公式,输入后按 Ctrl+Shift+Enter 结束,然后向下拖动填充。
方案3(使用辅助列,兼容性好):
在C2输入公式并下拉:
excel
=IF(ISNUMBER(FIND(A2, $D$2)), B2, "")
在E2输入公式去重:
excel
=TEXTJOIN(",", TRUE, UNIQUE(FILTER(C2:C3, C2:C3<>"")))或老版本用:
excel
=IFERROR(INDEX($C$2:$C$3, MATCH(0, INDEX(COUNTIF($E$1:E1, $C$2:$C$3) + ($C$2:$C$3=""), 0), 0)), "")
动态数组公式(Excel 365):
如果要垂直列出不重复值:
excel
=UNIQUE(FILTER(B2:B3, ISNUMBER(FIND(A2:A3, D2))), FALSE)
如果B列可能有多个不同值:
假设:
B2 = M
B3 = N
D2 = a,b
则结果为:M,N
注意事项:
如果不需要任何分隔符直接显示,可去掉TEXTJOIN
如果希望区分大小写,用 FIND;不区分用 SEARCH
公式中的范围 $B$2:$B$3 和 $A$2:$A$3 可根据实际数据调整
完整示例:
这个方案会先筛选出D2中包含的A列对应的所有B列值,然后去重,最后用逗号连接显示。