Excel中如何匹配并合并查找结果?
Excel中如何匹配并合并查找结果?
嘿,这个需求完全可以实现!我来一步步给你讲清楚怎么做,分不同Excel版本来说,你可以根据自己的情况选~
一、Excel 365/2021 版本(推荐用函数实现)
你的核心需求是:根据Sheet2的ItemA值(包括单个值、换行分隔的多值),在Sheet1中找到所有对应ItemB,并用换行合并结果,用TEXTJOIN+TEXTSPLIT(365新增函数)就能轻松搞定。
1. 处理单个ItemA值的情况
比如Sheet2的A2是plane,直接用以下公式就能提取Sheet1中所有plane对应的ItemB并换行合并:
=TEXTJOIN(CHAR(10), TRUE, IF(Sheet1!$A$2:$A$7=A2, Sheet1!$B$2:$B$7, ""))
CHAR(10):代表换行符,用来分隔多个匹配结果TEXTJOIN:把符合条件的ItemB值合并成一个文本,第二个参数TRUE表示忽略空值IF函数:遍历Sheet1的A列,找到和当前单元格匹配的行,返回对应的B列值,不匹配则返回空
2. 处理单元格内包含换行多值的情况
比如Sheet2的A6是plane+换行+car,需要先拆分单元格内的多个值,再分别查找合并,最后再把结果合并:
=TEXTJOIN(CHAR(10), TRUE, BYROW(TEXTSPLIT(A6, CHAR(10)), LAMBDA(x, TEXTJOIN(CHAR(10), TRUE, IF(Sheet1!$A$2:$A$7=x, Sheet1!$B$2:$B$7, "")))))
TEXTSPLIT(A6, CHAR(10)):把A6的内容按换行拆分成独立值(比如["plane", "car"])BYROW+LAMBDA:遍历拆分后的每个值,对每个值执行单个值的查找合并逻辑- 最后外层的
TEXTJOIN:把每个值对应的合并结果再用换行连起来
关键设置:开启自动换行
输入公式后,选中Sheet2的B列,右键→设置单元格格式→切换到「对齐」选项卡→勾选「自动换行」,这样换行符才能正常显示出来。
二、老版本Excel(无TEXTJOIN/TEXTSPLIT)的解决方案
如果你的Excel版本比较旧(比如2019及更早),可以用VBA自定义函数来实现:
- 按
Alt+F11打开VBA编辑器 - 右键左侧的工作簿名称→插入→模块
- 粘贴以下代码:
Function JoinMatches(lookupValue As String, lookupRange As Range, returnRange As Range, delimiter As String) As String Dim cell As Range Dim result As String Dim values() As String ' 拆分单元格内的多值 values = Split(lookupValue, delimiter) ' 遍历每个拆分后的值,查找匹配结果 For Each val In values For Each cell In lookupRange If cell.Value = val Then If result <> "" Then result = result & delimiter & returnRange.Cells(cell.Row - lookupRange.Row + 1).Value Else result = returnRange.Cells(cell.Row - lookupRange.Row + 1).Value End If End If Next cell Next val JoinMatches = result End Function
- 回到Excel,在Sheet2的B列输入公式:
=JoinMatches(A2, Sheet1!$A$2:$A$7, Sheet1!$B$2:$B$7, CHAR(10))
同样记得开启单元格的自动换行,就能得到你想要的结果啦。
按照上面的方法,你就能得到示例里的最终效果:
bus对应的B列是banana+换行+strawberry- 两个
car对应的B列都是pear plane+换行+car对应的B列是apple+换行+pear
备注:内容来源于stack exchange,提问作者Chrisengie




