如何在 Excel 中使用 vlookup 并合并多个对应值?
在 Excel 中使用 VLOOKUP 时,该函数通常只会返回它找到的第一个匹配值。然而,在许多常见场景中,您可能需要检索并合并与特定键关联的所有匹配值,例如列出班级中的所有学生或某个类别下的所有产品。由于标准的 VLOOKUP 函数在这方面有局限性,您可能会想知道如何实现既查找又将多个对应结果合并到一个单元格中的功能。下面,我们将探讨几种实用且高效的方法来完成此任务,适用于不同的 Excel 版本和用户偏好。

在 Excel 中使用 vlookup 并合并多个对应值
使用 TEXTJOIN 和 FILTER 函数进行 vlookup 并合并多个对应值
如果您使用的是 Excel 365 或 Excel 2021,TEXTJOIN 和 FILTER 函数的组合提供了一种高效的、基于公式的解决方案来查找并合并所有匹配值。这个解决方案特别适合动态和更新的数据集,因为它会在源数据更改时自动刷新结果。当您的 Excel 版本支持 FILTER 函数时最为适用,因为该函数仅限于最近的 Office 版本。
在目标单元格中输入以下公式,然后如果要将其应用于其他行,请向下拖动公式。所有对应的匹配值都将被提取并合并到一个单元格中。请参见截图:
=TEXTJOIN(", ", TRUE, FILTER($B$2:$B$16, $A$2:$A$16=D2, ""))
- FILTER($B$2:$B$16, $A$2:$A$16=D2, ""):这部分公式会检查 $A$2:$A$16 中的每个值;如果它与 D2 的值匹配,则 $B$2:$B$16 中的对应值将包含在结果数组中。
- $B$2:$B$16:将从中检索匹配值的区域。
- $A$2:$A$16=D2:选择值的条件 —— 只有那些 $A$2:$A$16 等于 D2 内容的行才会被处理。
- TEXTJOIN(", ", TRUE, ...):此函数获取 FILTER 函数的输出(一个匹配数组),并将它们合并成一个文本字符串,以指定的分隔符(逗号和空格)分隔,同时自动忽略空条目。
- ", ":设置逗号和空格作为分隔符;您可以根据需要更改此符号,例如使用分号或换行符。
- TRUE:确保在合并过程中忽略空单元格,因此您会得到整齐格式化的输出。
特别注意:此方法需要 Excel 365 或 2021,并且不适用于旧版本(例如 Excel 2019、2016 或更早版本)。在应用之前始终检查您的 Excel 版本。
提示:如果您的查找值(例如 D2)发生变化或向数据范围添加了额外的匹配项,结果会自动更新而无需任何额外步骤。
潜在限制:在非常大的数据集上,公式计算时间可能会增加。此外,用户必须确保查找或结果范围内没有合并单元格,因为这些可能导致公式错误。
使用 Kutools for Excel 进行 vlookup 并合并多个对应值
如果您觉得内置公式方法复杂或者您的 Excel 版本不支持像 TEXTJOIN 和 FILTER 这样的高级函数,Kutools for Excel 提供了一个用户友好的图形化解决方案。Kutools 中的一对多查找功能使您只需几个步骤即可查找并合并多个匹配结果,非常适合初学者和高级用户。使用 Kutools,无需编写复杂的公式或代码,尤其在处理需要重复查找和汇总的大规模或变量数据集时非常方便。
安装 Kutools for Excel 后,请按照以下步骤操作:
点击 Kutools > 高级 LOOKUP > 一对多查找(返回多个结果) 打开设置对话框。在此对话框中,您可以快速配置查找和输出设置,按照以下步骤进行操作:
- 选择用于合并结果的目标输出单元格,以及您希望搜索的值所在的单元格;
- 指示包含查找键和结果列的表格范围;
- 指定包含查找键的列(关键列)和将要合并值的列(返回列);
- 单击“确定”按钮确认设置并处理数据。
结果:Kutools 将在您选定的输出单元格中显示所有匹配和合并的值。请参见截图:
此方法特别推荐给喜欢从 Excel 界面操作而不使用复杂公式或代码的人。它还减少了公式错误的可能性,并提高了处理重复查找和合并任务的效率。
使用用户定义函数进行 vlookup 并合并多个对应值
对于精通 VBA(Visual Basic for Applications)的用户,或者使用缺乏动态数组或 FILTER 函数支持的旧版 Excel 用户,您可以创建自定义的用户定义函数(UDF)来实现灵活的多结果合并。这种方法兼容所有 Excel 版本,并且可以根据特定的分隔符符号或条件进行定制。
1. 按住 ALT + F11 键打开 Microsoft Visual Basic for Applications 窗口。
2. 单击 插入 > 模块,并将以下代码粘贴到模块窗口中。
VBA 代码:在一个单元格中查找并合并多个匹配值
Function ConcatenateMatches(LookupValue As String, LookupRange As Range, ReturnRange As Range, Optional Delimiter As String = ", ") As String
'Updateby Extendoffice
Dim Cell As Range
Dim Result As String
Result = ""
For Each Cell In LookupRange
If Cell.Value = LookupValue Then
Result = Result & Cell.Offset(0, ReturnRange.Column - LookupRange.Column).Value & Delimiter
End If
Next Cell
If Result <> "" Then
Result = Left(Result, Len(Result) - Len(Delimiter))
End If
ConcatenateMatches = Result
End Function
3. 保存并关闭 VBA 编辑器。返回工作表,并通过在空白单元格中输入公式:=ConcatenateMatches(D2, $A$2:$A$16, $B$2:$B$16) 使用此 UDF,其中您希望结果显示。向下拖动填充柄以将公式复制到其他单元格。所有基于特定查找值的对应值将被返回并在一个单元格中合并,以逗号和空格分隔。请参见截图:
- D2:要在数据集中匹配的查找值(LookupValue)。
- A2:A16:函数在此范围内搜索查找值(LookupRange)。
- B2:B16:当查找值匹配时,包含要合并的值的范围(ReturnRange)。
使用 VBA 代码进行 vlookup 并合并多个对应值
对于需要重复使用或希望避免在工作表单元格中使用自定义函数的情况,您可以使用现成的 VBA 宏直接合并结果。这种方法在共享环境中效果良好,在这种环境下,并非所有用户都具有相同的版本或插件。
1. 单击 开发工具 > Visual Basic 打开 VBA 编辑器。
2. 在 VBA 窗口中,单击 插入 > 模块,然后将此代码粘贴到模块中:
Sub VLookupAndConcatenate()
Dim ws As Worksheet
Dim dataRange As Range, lookupRange As Range, resultRange As Range
Dim dict As Object
Dim i As Long, lastRow As Long
Dim lookupValue As Variant, result As String
Dim delimiter As String
delimiter = ", "
Set dict = CreateObject("Scripting.Dictionary")
Set ws = ActiveSheet
On Error Resume Next
Set dataRange = Application.InputBox( _
Prompt:="Please select the data range (contains lookup column and result column)", _
Title:="Select Data Range", _
Type:=8)
On Error GoTo 0
If dataRange Is Nothing Then Exit Sub
On Error Resume Next
Set lookupRange = Application.InputBox( _
Prompt:="Please select the lookup range (single column)", _
Title:="Select Lookup Range", _
Type:=8)
On Error GoTo 0
If lookupRange Is Nothing Then Exit Sub
On Error Resume Next
Set resultRange = Application.InputBox( _
Prompt:="Please select the starting cell for results output", _
Title:="Select Output Location", _
Type:=8)
On Error GoTo 0
If resultRange Is Nothing Then Exit Sub
resultRange.Resize(lookupRange.Rows.Count, 1).ClearContents
For i = 1 To dataRange.Rows.Count
lookupValue = dataRange.Cells(i, 1).Value
If Not dict.Exists(lookupValue) Then
dict.Add lookupValue, dataRange.Cells(i, 2).Value
Else
dict(lookupValue) = dict(lookupValue) & delimiter & dataRange.Cells(i, 2).Value
End If
Next i
For i = 1 To lookupRange.Rows.Count
lookupValue = lookupRange.Cells(i, 1).Value
If dict.Exists(lookupValue) Then
resultRange.Cells(i, 1).Value = dict(lookupValue)
Else
resultRange.Cells(i, 1).Value = "Not Found"
End If
Next i
MsgBox "Operation completed! Processed " & lookupRange.Rows.Count & " lookup values.", vbInformation
End Sub
3. 单击 按钮运行宏。输入框将提示您选择数据范围、查找范围、结果范围。然后,合并的结果将直接显示在选定的输出单元格中。
如果您经常对不同值执行多次合并查找,这种宏方法特别有用,因为它避免了在工作表中充斥 UDF 调用。
如果需要,您可以轻松调整代码中的分隔符,并扩展宏以根据您的工作流程将结果输出到单元格或文件中。
在 Excel 中合并多个对应值可以使用各种方法,每种方法都有其特定的优势,具体取决于您的情况。无论您选择动态数组公式、像 Kutools for Excel 这样的插件还是基于 VBA 的方法,都将提高您分析和显示分组数据的效率。根据数据集的大小和复杂性,考虑哪种方法为您或您的团队提供了最佳性能和易于维护的方案。在日常操作中,检查数据一致性,避免合并单元格,并验证引用范围以获得最佳结果。如果在公式计算中遇到错误,请再次检查您的范围是否与数据匹配,并确保您使用了适用于 Excel 版本的正确公式输入方法。
有关更多高级 Excel 技巧和一系列实用的操作指南,请访问我们广泛的教程库。
最佳 Office 办公效率工具
🤖 | Kutools AI 助手:基于智能执行,彻底革新数据分析 |生成代码|创建自定义公式|分析数据并生成图表|调用 Kutools Functions… |
热门功能:查找、选中项的背景色或标记重复项|删除空行|合并列或单元格且不丢失数据|四舍五入(无公式)... | |
高级 LOOKUP:多条件查找 (VLookup)|多值查找 (VLookup)|多表查找 (VLookup Across Multiple Sheets)|模糊查找 (Fuzzy Lookup)... | |
高级下拉列表:快速创建下拉列表|依赖型下拉列表|多选下拉列表... | |
列管理器:添加指定数量的列 |移动列 |切换隐藏列的可见状态| 比较区域及列... | |
特色功能:网格聚焦|设计视图|增强编辑栏|工作簿 & 工作表管理器|资源库(自动文本)|日期提取|合并数据|加密/解密单元格|按列表发送电子邮件|超级筛选|特殊筛选(筛选粗体/倾斜/删除线等)... | |
热门15 大工具集:12 款文本工具(添加文本、删除特定字符等)|50+ 种图表 类型(甘特图等)|40+ 实用公式(基于生日计算年龄等)|19 款插入工具(插入二维码、按路径插入图片等)|12 种转换工具(小写金额转大写、汇率转换等)|7 款合并与分割工具(高级合并行、分割单元格等)|...更多精彩等你发现 |
用 Kutools for Excel 加速你的 Excel 技能,体验前所未有的高效办公。 Kutools for Excel 提供300 多项高级功能,助您提升效率,节省大量时间。点击此处,获取你最需要的功能...
Office Tab 为 Office 带来标签式界面,让你的工作更加轻松
- 在 Word、Excel、PowerPoint 启用标签式编辑和阅读
- 在同一窗口的新标签中打开和创建多个文档,无需新建窗口。
- 办公效率提升50%,每天帮你减少上百次鼠标点击!