Excel多条件求和(含部分文本匹配)及动态区域保持需求技术问询
Excel多条件求和(含部分文本匹配)及动态区域保持需求技术问询
嗨,我来帮你搞定这个Excel多条件求和的问题~先理清楚你的核心需求:
- 要在Sheet1的F37单元格,对Sheet2里E7:AB150区域的数值求和
- 求和要满足两个条件:
- Sheet2的B3:B100区域里的单元格,等于Sheet1 B37的内容
- Sheet2第2行(A2:AB2)的单元格,包含指定的部分文本(之前你用的是精确匹配,现在要改成模糊匹配)
- 关键要求:删除行/列后,公式引用的区域不能出错,你已经用OFFSET实现了这个稳定性,不想用INDIRECT
你现在的公式已经能实现精确匹配的条件求和,要改成部分文本匹配,只需要修改第二个条件的判断逻辑就行。咱们来调整一下:
修改后的数组公式
{=SUM((OFFSET('Sheet2'!$E$6;1;1;150;40))*(--('Sheet2'!$C$7:$C$152=Sheet1!B37))*(--(ISNUMBER(SEARCH("TR", OFFSET('Sheet2'!$E$1;0;1;1;40))))))}
公式修改说明
部分文本匹配的实现:把原来的
--(OFFSET(...)="TR")改成--(ISNUMBER(SEARCH("TR", OFFSET(...))))SEARCH("TR", 目标单元格):会在目标单元格里查找"TR"这个文本,找到就返回它的位置(数字),找不到返回错误值ISNUMBER(...):把SEARCH的结果转成TRUE(找到)或FALSE(没找到)- 前面加
--:把TRUE/FALSE转成1/0,这样就能和其他条件的数组相乘,只有符合条件的单元格才会参与求和
更灵活的文本引用(可选):如果不想把"TR"硬写在公式里,想引用Sheet1的某个单元格(比如C37),可以改成这样:
{=SUM((OFFSET('Sheet2'!$E$6;1;1;150;40))*(--('Sheet2'!$C$7:$C$152=Sheet1!B37))*(--(ISNUMBER(SEARCH(Sheet1!C37, OFFSET('Sheet2'!$E$1;0;1;1;40))))))}
注意事项
- 数组公式的确认:如果你用的是Excel 2019及更早版本,输入完公式后要按Ctrl+Shift+Enter来确认;Excel 365/2021版本直接回车就行
- 大小写区分:SEARCH函数不区分大小写,如果需要严格区分大小写,把SEARCH换成
FIND函数 - 动态区域的稳定性:你用OFFSET的写法是对的,基于固定单元格偏移,删除行/列后不会出现#REF!错误,能保持引用区域的有效性
备注:内容来源于stack exchange,提问作者Васил Недялков
相关产品推荐
相关产品推荐

