如何按双条件拼接Excel多行数据?求公式或VBA代码
解决方案:按条件拼接对应单元格内容
原始数据表格
| A | B | C | D |
|---|---|---|---|
| 13920 | APPLE | TRUE | 13920-13921-13924-13925 |
| 13921 | APPLE | TRUE | 13920-13921-13924-13925 |
| 13922 | ORANGE | ||
| 13923 | LEMON | ||
| 13924 | APPLE | TRUE | 13920-13921-13924-13925 |
| 13925 | APPLE | TRUE | 13920-13921-13924-13925 |
| 13927 | BANANA | TRUE | 13927-13928 |
| 13928 | BANANA | TRUE | 13927-13928 |
需求说明
当C列单元格值为TRUE时,查找B列中与当前行B列值相同的所有行,将对应A列的值用连字符-拼接至D列;若C列不为TRUE,则D列留空,要求公式可复制到D列其他行,或提供VBA实现方案。
方法一:Excel公式实现(支持下拉复制)
适用于Excel 365/2021及以上版本(支持动态数组),旧版本需按Ctrl+Shift+Enter作为数组公式输入:
在D2单元格输入以下公式,然后下拉填充至所有行:
=IF(C2=TRUE, TEXTJOIN("-", TRUE, IF($B$2:$B$9=B2, $A$2:$A$9, "")), "")
公式说明
IF(C2=TRUE, ..., ""):判断当前行C列是否为TRUE,是则执行拼接,否则返回空TEXTJOIN("-", TRUE, ...):用连字符拼接符合条件的内容,第二个参数TRUE表示忽略空值IF($B$2:$B$9=B2, $A$2:$A$9, ""):筛选出B列与当前行B列值相同的行,返回对应A列内容,否则返回空
方法二:VBA自定义函数实现
如果需要兼容所有Excel版本,可创建自定义函数CONCATIFS,实现类似SUMIFS的条件拼接逻辑:
- 按下
Alt+F11打开VBA编辑器 - 插入新模块(右键左侧工程窗口→插入→模块)
- 粘贴以下代码:
Function CONCATIFS(rngCriteria As Range, criteria As Variant, rngConcat As Range, Optional delimiter As String = "-") As String Dim cell As Range Dim result As String result = "" ' 遍历条件区域,匹配则拼接对应内容 For Each cell In rngCriteria If cell.Value = criteria Then If result <> "" Then result = result & delimiter result = result & rngConcat.Cells(cell.Row - rngCriteria.Row + 1).Value End If Next cell CONCATIFS = result End Function
- 返回Excel界面,在D2单元格输入以下公式,下拉填充:
=IF(C2=TRUE, CONCATIFS($B$2:$B$9, B2, $A$2:$A$9), "")
自定义函数说明
CONCATIFS(条件区域, 匹配值, 待拼接区域, [分隔符]):参数依次为条件所在区域、要匹配的条件值、需要拼接的内容区域,可选分隔符默认是-- 函数会遍历条件区域,将所有匹配条件的对应内容用分隔符拼接后返回
内容的提问来源于stack exchange,提问作者MorisA70
相关产品推荐
相关产品推荐

