Note: The other languages of the website are Google-translated. Back to English

如何在Excel中vlookup并连接多个对应值?

众所周知, VLOOKUP Excel中的函数可以帮助我们查找一个值并在另一列中返回相应的数据,但是通常,如果存在多个匹配数据,则它只能获取第一个相对值。 在本文中,我将讨论如何仅在一个单元格或垂直列表中进行vlookup并串联多个对应的值。

Vlookup并使用公式垂直返回多个匹配值

Vlookup并使用用户定义的函数连接单元格中的多个匹配值

Vlookup并使用Kutools for Excel连接单元格中的多个匹配值


假设,我有以下数据范围,要根据特定的值垂直获取所有相应的值(如以下屏幕截图所示),可以应用数组公式。

doc vlookup串联1

1。 输入以下公式: =IF(COUNTIF($A$1:$A$16,$D$2)>=ROWS($1:1),INDEX($B$1:$B$16,SMALL(IF($A$1:$A$16=$D$2,ROW($1:$16)),ROW(1:1))),"") 放入要放入结果的空白单元格,例如E2,然后按 Ctrl + Shift + Enter 键一起获得基于特定条件的相对值,请参见屏幕截图:

doc vlookup串联2

备注:在上式中:

A1:A16 是包含要查找的特定值的列范围;

D2 指示您要vlookup的特定值;

B1:B16 是您要从中返回相应数据的列范围;

$ 1:$ 16 指示范围内的行引用。

2。 然后选择单元格E2,并将填充手柄向下拖动到这些单元格,直到获得空白单元格,所有匹配的值都列在该列中,如以下屏幕截图所示:

doc vlookup串联3


有时,您希望将匹配的值合并到一个单元格中,并使用特定的分隔符将它们串联起来,而不是垂直获取相对值。 在这种情况下,以下用户定义功能可能会有所帮助。

1. 按住 ALT + F11 键打开 Microsoft Visual Basic应用程序 窗口。

2。 点击 插页 > 模块,然后将以下代码粘贴到 模块 窗口。

VBA代码:Vlookup并连接单元格中的多个匹配值

Function CusVlookup(lookupval, lookuprange As Range, indexcol As Long)
'updateby Extendoffice
Dim x As Range
Dim result As String
result = ""
For Each x In lookuprange
    If x = lookupval Then
        result = result & " " & x.Offset(0, indexcol - 1)
    End If
Next x
CusVlookup = result
End Function

3。 然后保存并关闭此代码,返回到工作表,然后输入以下公式: = cusvlookup(D2,A1:B16,2) 放入要放入结果的空白单元格,然后按 输入 键,基于特定数据的所有相应值都已返回到一个带有空格分隔符的单元格中,请参见屏幕截图:

doc vlookup串联4

备注:在上式中: D2 表示您要查找的单元格值, A1:B16 是您要获取数据的数据范围,数字 2 是要从中返回匹配值的列号,您可以根据需要更改这些引用。


如果你有 Kutools for Excel,其 高级组合行 功能,您可以轻松轻松地完成这项工作。 此功能可帮助您基于另一列中的相同数据,将所有匹配值与特定定界符组合在一起。

Kutools for Excel : 带有300多个便捷的Excel加载项,可以在30天内免费试用.

安装后 Kutools for Excel,请执行以下操作:

1. 根据特定数据选择要获取相应值的数据范围。

2。 然后点击 库工具 > 合并与拆分 > 高级组合行,请参见屏幕截图:

3。 在 高级组合行 对话框中,单击要合并的列名,然后单击 首要的关键 按钮,请参见屏幕截图:

doc vlookup串联6

4。 然后,单击要返回匹配值的另一个列名,然后单击“确定”。 结合 选择一个分隔符以分隔组合值,请参见屏幕截图:

doc vlookup串联7

5。 然后点击 Ok 按钮,所有基于相同值的对应值已与特定的分隔符组合在一起,请参见屏幕截图:

doc vlookup串联8 2 doc vlookup串联9

 立即下载和免费试用Excel的Kutools!


Kutools for Excel:具有300多个方便的Excel加载项,可以在30天内免费试用,没有任何限制。 立即下载并免费试用!

最佳办公效率工具

Kutools for Excel解决了您的大多数问题,并使您的生产率提高了80%

  • 重用: 快速插入 复杂的公式,图表 以及您以前使用过的任何东西; 加密单元 带密码 创建邮件列表 并发送电子邮件...
  • 超级公式栏 (轻松编辑多行文本和公式); 阅读版式 (轻松读取和编辑大量单元格); 粘贴到过滤范围...
  • 合并单元格/行/列 不会丢失数据; 拆分单元格内容; 合并重复的行/列...防止细胞重复; 比较范围...
  • 选择重复或唯一 行; 选择空白行 (所有单元格都是空的); 超级查找和模糊查找 在许多工作簿中; 随机选择...
  • 确切的副本 多个单元格,无需更改公式参考; 自动创建参考 到多张纸; 插入项目符号,复选框等...
  • 提取文字,添加文本,按位置删除, 删除空间; 创建和打印分页小计; 在单元格内容和注释之间转换...
  • 超级滤镜 (将过滤方案保存并应用于其他工作表); 高级排序 按月/周/日,频率及更多; 特殊过滤器 用粗体,斜体...
  • 结合工作簿和工作表; 根据关键列合并表; 将数据分割成多个工作表; 批量转换xls,xlsx和PDF...
  • 超过300种强大功能。 支持Office / Excel 2007-2019和365。支持所有语言。 在您的企业或组织中轻松部署。 完整功能30天免费试用。 60天退款保证。
kte选项卡201905

Office选项卡为Office带来了选项卡式界面,使您的工作更加轻松

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
  • 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
  • 每天将您的工作效率提高50%,并减少数百次鼠标单击!
officetab底部
按评论排序
注释 (16)
还没有评分。 成为第一位评论!
该评论由网站上的主持人最小化
如何得到结果。 请帮忙。 数据 data1 结果 a 1 a1 b 2 a2 c b1 b2 c1 c2
该评论由网站上的主持人最小化
使用 cusvlookup 时,是否可以添加姓氏以及中间可能出现在 C 列中的逗号
该评论由网站上的主持人最小化
喜欢 Excel 2013 的功能,但稍作修改,将分隔字符更改为“;” 而不是“”,然后删除前缀“;” 在我的示例中,结果匹配值将具有 ;result01 或 ;result01;result02 。 添加了额外的 If Left(xResult, 1) = ";" 删除任何多余的“;” 如果它是第一个字符,则在字符串的开头。 我确信有一种更简洁的方法,但它对我有用。 :) Function CusVlookup(pValue As String, pWorkRng As Range, pIndex As Long) Dim rng As Range Dim xResult As String xResult = "" For Each rng in pWorkRng If rng = pValue Then xResult = xResult & ";" & rng.Offset(1, pIndex - 0) If Left(xResult, 1) = ";" 然后 xResult = MID(xResult,1) End If End If Next CusVlookup = xResult End Function
该评论由网站上的主持人最小化
如果为空,则为结果设置 if 条件。

函数 CusVlookup(lookupval, lookuprange As Range, indexcol As Long)
'更新 Extendoffice 20151118
暗淡 x 作为范围
暗淡结果为字符串
结果 = ""
对于每个 x 在查找范围内
如果 x = lookupval 则
如果不是结果 = "" 那么
结果 = 结果 & " " & x.Offset(0, indexcol - 1)
其他
结果 = x.Offset(0, indexcol - 1)
结束如果
下一个x
CusVlookup = 结果
函数结束
该评论由网站上的主持人最小化
这太棒了,但我正在寻找其他东西,我有一张带有 RollNo StudentName sub1, sub2, sub3 ... 总结果的表,当我输入 Rollnumber 时,它应该给出类似“SName Sub1 64, sub2 78,...总计389,结果通过”,可以吗
该评论由网站上的主持人最小化
有没有办法删除连接中的重复值?
该评论由网站上的主持人最小化
你好,雅各布,
可能下面的文章可以帮助您解决您的问题。
https://www.extendoffice.com/documents/excel/3381-excel-extract-unique-values-with-criteria.html

请尝试,希望对您有所帮助!
该评论由网站上的主持人最小化
有没有办法使用上面的 vba 代码和公式只列出一次重复值? 我不确定将 countif>1 语句放在公式栏中或 vba 本身的什么位置。 请帮忙
该评论由网站上的主持人最小化
您可以添加两个额外的条件来跳过空白单元格并跳过重复项:For i = 1 To CriteriaRange.Count
If CriteriaRange.Cells(i).Value = Condition Then
If ConcatenateRange.Cells(i).Value <> "" Then 'SKIP BANKS
If InStr(xResult, ConcatenateRange.Cells(i).Value) = 0 Then 'SKIP IF FOUND DUPLICATE
xResult = xResult & Separator & ConcatenateRange.Cells(i).Value
结束如果
结束如果
结束如果
接下来,我
该评论由网站上的主持人最小化
我不得不说,我一直在尝试获得一个用于组合多个值并将它们返回到单个单元格的公式 2 天。 这个“如何”救了我!! 太感谢了! 如果没有你的模块,我永远不会得到它!
不过,我确实有 2 个问题。 我将分隔符作为逗号而不是空格,因此它以逗号开头。 有没有办法防止逗号开始但保留其余部分?
我的第二个问题是; 当我使用填充句柄时,它会更改范围值以及我要查找的单元格值。 我希望它继续更改我要查找的单元格编号,但保持相同的范围值。 我怎样才能做到这一点?

非常感谢你的帮助!!
该评论由网站上的主持人最小化
cusVlookup 对我来说非常有用。 使用不同分隔符的另一种方法是包装两个替代函数。 第一个(从内到外)用无空格替换第一个空格,第二个用我的“/”替换所有其他空格。 如果需要逗号,可以使用“,”。
=SUBSTITUTE(SUBSTITUTE(cusVlookup(D2,Table1,2)," ","",1)," "," / ")

此外,如果您的查找值不是第一列,您可以使用 0 或负数转到左侧的列。
=SUBSTITUTE(SUBSTITUTE(cusVlookup(D2,Table1,-1)," ","",1)," "," / ")
该评论由网站上的主持人最小化
嗨,杰夫,
谢谢你的分享,你一定是个热心人。
该评论由网站上的主持人最小化
这对我来说非常有用 - 有没有办法改变它检查单元格是否包含而不是完全匹配? 基本上我有一个任务列表,其中:
A 列:依赖项(例如 10003 10004 10008)
B 列:任务参考(例如 10001)
C 列:相关任务(公式结果的列)- 它将在其中查找任务引用以查看 A 列中哪些行包含它,然后列出这些任务的任务引用。

例如:

行 | A栏| B栏| C栏
1 | | 10001 | 10002 10003
2 | 10001 | 10002 | 10003
3 | 10001 10002 | 10003 |
该评论由网站上的主持人最小化
您可能想使用 Instr() 函数来检查单元格中的文本字符串中的某些内容。 如果您正在寻找开始或结束的详细信息,也可以使用 Left() 和 Right()。
该评论由网站上的主持人最小化
有没有办法获得“class1”的唯一“名称”
该评论由网站上的主持人最小化
你好,西姆约翰,
也许下面的文章可以解决您的问题,请查看:
https://www.extendoffice.com/documents/excel/3381-excel-extract-unique-values-with-criteria.html
这里还没有评论
留下你的意见
以访客身份发帖
×
评价此帖子:
0   产品特性
建议地点