Excel技术问询:列重复及特定文本条件下的求和与文本合并公式
嘿,针对你的需求,我整理了两种场景下的Excel公式方案——分别适配Excel 365/2021(支持动态数组)和旧版Excel,帮你同时实现条件求和与文本合并:
一、Excel 365/2021 版本方案(推荐)
这个版本可以直接用动态数组函数,公式更简洁易懂。假设你要在D2单元格生成对应A2行的结果,输入以下公式后下拉即可:
=IF(AND(COUNTIF(A:A,A2)>1,COUNTIFS(A:A,A2,B:B,"Income")>0,COUNTIFS(A:A,A2,B:B,"Special Cash")>0),TEXTJOIN(" | ",TRUE,"求和结果: "&SUMIFS(C:C,A:A,A2,B:B,{"Income","Special Cash"}),"合并文本: "&TEXTJOIN(", ",TRUE,FILTER(B:B,(A:A=A2)*(B:B={"Income","Special Cash"})))),"")
公式拆解:
- 条件判断部分:
AND(COUNTIF(A:A,A2)>1,COUNTIFS(A:A,A2,B:B,"Income")>0,COUNTIFS(A:A,A2,B:B,"Special Cash")>0)COUNTIF(A:A,A2)>1:检查当前A列的值是否存在重复(出现次数大于1)- 后面两个
COUNTIFS:确认该A值对应的行里,同时存在Income和Special Cash这两个文本
- 求和部分:
SUMIFS(C:C,A:A,A2,B:B,{"Income","Special Cash"})- 自动计算符合「A列等于当前值」且「B列是指定两个文本」的C列数值之和
- 文本合并部分:
TEXTJOIN(", ",TRUE,FILTER(B:B,(A:A=A2)*(B:B={"Income","Special Cash"})))- 先用
FILTER筛选出符合条件的B列文本,再用TEXTJOIN用「逗号+空格」合并,TRUE参数用来忽略空值
- 先用
- 结果整合:用
TEXTJOIN把求和结果和合并文本用「|」分隔,符合条件就显示结果,否则显示空值
二、旧版Excel 兼容方案
如果你的Excel版本不支持FILTER和TEXTJOIN(比如2016及更早版本),可以用数组公式实现:
求和公式(D2单元格):
=IF(AND(COUNTIF(A:A,A2)>1,COUNTIFS(A:A,A2,B:B,"Income")>0,COUNTIFS(A:A,A2,B:B,"Special Cash")>0),SUM(SUMIFS(C:C,A:A,A2,B:B,{"Income","Special Cash"})),"")
输入后直接下拉即可,不需要数组输入。
文本合并公式(E2单元格):
=IF(AND(COUNTIF(A:A,A2)>1,COUNTIFS(A:A,A2,B:B,"Income")>0,COUNTIFS(A:A,A2,B:B,"Special Cash")>0),LEFT(TEXTJOIN(", ",TRUE,IF((A:A=A2)*(B:B="Income"),B:B,""),IF((A:A=A2)*(B:B="Special Cash"),B:B,"")),LEN(TEXTJOIN(", ",TRUE,IF((A:A=A2)*(B:B="Income"),B:B,""),IF((A:A=A2)*(B:B="Special Cash"),B:B,"")))),"")
注意:输入完成后需要按 Ctrl+Shift+Enter 作为数组公式确认,然后下拉应用到其他行。
内容的提问来源于stack exchange,提问作者J.Markson




