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

如何在一个逗号分隔的单元格中返回多个查找值?

在Excel中,我们可以应用VLOOKUP函数从表单元格中返回第一个匹配的值,但是有时,我们需要提取所有匹配的值,然后用特定的分隔符(例如逗号,破折号等)分隔为单个单元格如下图所示。 我们如何在Excel中的一个逗号分隔的单元格中获取并返回多个查找值?

doc返回多个值,以逗号分隔1

使用用户定义函数在一个逗号分隔的单元格中返回多个查找值

使用Kutools for Excel在一个逗号分隔的单元格中返回多个查找值


使用用户定义函数在一个逗号分隔的单元格中返回多个查找值

通常,我们没有直接的方法来提取并返回多个匹配值并用逗号分隔到一个单元格中,在这里,您可以创建一个用户定义函数来解决此工作,请执行以下操作:

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

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

VBA代码:将多个查找值返回到一个逗号分隔的单元格中

Function SingleCellExtract(LookupValue As String, LookupRange As Range, ColumnNumber As Integer, Char As String)
'Updateby Extendoffice
    Dim I As Long
    Dim xRet As String
    For I = 1 To LookupRange.Columns(1).Cells.Count
        If LookupRange.Cells(I, 1) = LookupValue Then
            If xRet = "" Then
                xRet = LookupRange.Cells(I, ColumnNumber) & Char
            Else
                xRet = xRet & "" & LookupRange.Cells(I, ColumnNumber) & Char
            End If
        End If
    Next
    SingleCellExtract = Left(xRet, Len(xRet) - 1)
End Function

3。 然后保存此代码并关闭“模块”窗口,返回到工作表,然后输入以下公式: = SingleCellExtract(D2,A2:B15,2,“,”) 放入要返回结果的空白单元格。 然后按 输入 获得结果的关键,请参见屏幕截图:

doc返回多个值,以逗号分隔2

备注:在上式中:

D2: 指示要查找的单元格值;

A2:B15: 是您要获取数据的数据范围;

2:数字2是要返回匹配值的列号;

,:逗号是您要分隔多个值的分隔符。

您可以根据需要更改它们。


使用Kutools for Excel在一个逗号分隔的单元格中返回多个查找值

如果你有 Kutools for Excel,此任务将不再是问题。 的 高级组合行 实用程序可以帮助您基于列组合所有相对值。

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

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

1。 选择要合并基于列的所有匹配值的数据范围。

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

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

doc返回多个值,以逗号分隔4

4。 然后单击要合并其匹配值的其他列名称,然后单击 结合 选择一个分隔符以分隔组合值,请参见屏幕截图:

doc返回多个值,以逗号分隔5

5。 然后点击 OK 按钮,所有具有相同值的相应单元格都已合并为一个单元格,并以逗号分隔,请参见屏幕截图:

doc返回多个值,以逗号分隔6 2 doc返回多个值,以逗号分隔7

单击以了解有关此高级合并行实用程序的更多详细信息……

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


演示:使用Kutools for Excel在一个逗号分隔的单元格中返回多个查找值

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

最佳办公效率工具

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

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

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

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
  • 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
  • 每天将您的工作效率提高50%,并减少数百次鼠标单击!
officetab底部
按评论排序
注释 (17)
5中的5评分 · 2评级
该评论由网站上的主持人最小化
当我要粘贴并保存模块时,出现一条弹出消息,表明功能兼容性检查器严重丢失
该评论由网站上的主持人最小化
感谢这篇文章。 你知道我将如何操作这正在创建的两个单独的整数吗? 例如,假设 '=SingleCellExtract' 函数现在产生 (1 , 2)。 有没有办法在它旁边有一个单元格(1+.5,2+.5)?
该评论由网站上的主持人最小化
这有效,但主要减慢了我的excel! 有什么技巧可以帮助加快速度吗?
该评论由网站上的主持人最小化
这根本行不通。 我无法让它在我自己的应用程序中工作,所以我复制/粘贴了 vba 和公式,每次都返回错误
该评论由网站上的主持人最小化
谢谢,首先我设法让它工作而不会降低性能。 我使用的是值而不是文本,所以我的问题是我想带回所有那些在列表中少于 19 分的人。 单细胞提取物可以为此工作还是必须是特定值?
该评论由网站上的主持人最小化
当范围超过 154 行(即:B154)时,VB 命令会中断......
该评论由网站上的主持人最小化
如果增加数组大小会弹出错误
该评论由网站上的主持人最小化
当 2 个条件匹配时,在一个逗号分隔的单元格中返回多个查找值
A2=B2 然后由“SingleCellExtract”从范围中得到结果 - 请......
该评论由网站上的主持人最小化
早上好,

VBA 代码与我的工作表完美配合,非常清晰和简单,但是,我试图找到一种方法来告诉 excel 只返回唯一值。 使用相同的代码可以吗?
5中的5评分
该评论由网站上的主持人最小化
嗨,

我想要多个值的精确验证代码,每个值用逗号和空格分隔。

例如:
露西、汤姆、尼科尔、阿卡什、苹果

如果您有任何建议,请重播。
4.5中的5评分
该评论由网站上的主持人最小化
你好,曼尼坎塔
要用逗号和空格分隔多个值,只需在逗号后面添加一个空格,将公式更改为: =SingleCellExtract(D2,A2:B15,2,", ").
请尝试,希望对您有所帮助!
该评论由网站上的主持人最小化
嗨,天阳,

感谢您的重播!

我已经尝试过相同的方法,但在单元格值中,最后一个额外的逗号 (,) 是示例。

露西、汤姆、尼科尔、阿卡什、苹果、

这不适用于 Json 文件,所以我想要用逗号和空格分隔的值,如下所示。

露西、汤姆、尼科尔、阿卡什、苹果

谢谢!
该评论由网站上的主持人最小化
你好,马尼坎塔
在这种情况下,您可以应用以下用户定义函数:

Function MultipleValues(work_range As Range, criteria As Variant, merge_range As Range, Optional Separator As String = ",") As Variant
Dim outcome As String
On Error Resume Next
If work_range.Count <> merge_range.Count Then
MultipleValues = CVErr(xlErrRef)
Exit Function
End If
For i = 1 To work_range.Count
If work_range.Cells(i).Value = criteria Then
outcome = outcome & Separator & merge_range.Cells(i).Value
End If
Next i
If outcome <> "" Then
outcome = VBA.Mid(outcome, VBA.Len(Separator) + 1)
End If
MultipleValues = outcome
Exit Function
End Function


粘贴代码后,请使用以下公式: =MultipleValues($A$2:$A$15,D2,$B$2:$B$15,", ")

请尝试,希望对您有所帮助!
如果您还有其他问题,请在此处发表评论。
https://www.extendoffice.com/images/stories/comments/comment-skyyang/doc-return-multiple-matching-1.png
该评论由网站上的主持人最小化
嗨,天阳,

现在正在运行,感谢您的快速回复。

这对我来说非常有用,再次感谢您的帮助。

问候,
马尼坎塔。
5中的5评分
该评论由网站上的主持人最小化
No soy programador pero necesito ayuda para que la función de abajo en lugar de devolverme esto

S-01-08-0017->Micro Post 1R,黑色,不锈钢 -End,->4;S-01-08-0057->Micro Post 2R,黑色,不锈钢 -End,->2

我 devuelva los valores en líneas diferentes。
S-01-08-0017->微柱 1R,黑色,不锈钢 -End,->4
S-01-08-0057->微柱 2R,黑色,不锈钢 -End,->2

功能:
函数 SingleCellExtract(LookupValue 作为字符串,LookupRange 作为范围,ColumnNumber 作为整数,Char 作为字符串)
'更新通过 Extendoffice
暗淡我只要
将 xRet 调暗为字符串
对于 I = 1 To LookupRange.Columns(1).Cells.Count
如果 LookupRange.Cells(I, 1) = LookupValue 那么
如果 xRet = "" 那么
xRet = LookupRange.Cells(I, ColumnNumber) & 字符
其他
xRet = xRet & "" & LookupRange.Cells(I, ColumnNumber) & 字符
结束如果
结束如果
下一页
SingleCellExtract = 左(xRet,Len(xRet)- 1)
函数结束
该评论由网站上的主持人最小化
你好,叶瑞,
您的意思是根据分号字符将单元格分成多行吗?
如果是这样,下面的 VBA 代码可以帮助您:
Sub SplitAll()
    Dim xRg As Range
    Dim xRg1 As Range
    Dim xCell As Range
    Dim I As Long
    Dim xAddress As String
    Dim xUpdate As Boolean
    Dim xRet As Variant
    On Error Resume Next
    xAddress = Application.ActiveWindow.RangeSelection.Address
    Set xRg = Application.InputBox("Please select a range", "Kutools for Excel", xAddress, , , , , 8)
    Set xRg = Application.Intersect(xRg, xRg.Worksheet.UsedRange)
    If xRg Is Nothing Then Exit Sub
        If xRg.Columns.Count > 1 Then
            MsgBox "You can't select multiple columns", , "Kutools for Excel"
            Exit Sub
            End If
            Set xRg1 = Application.InputBox("Split to (single cell):", "Kutools for Excel", , , , , , 8)
            Set xRg1 = xRg1.Range("A1")
            If xRg1 Is Nothing Then Exit Sub
                xUpdate = Application.ScreenUpdating
                Application.ScreenUpdating = False
                For Each xCell In xRg
                    xRet = Split(xCell.Value, ";")
                    xRg1.Worksheet.Range(xRg1.Offset(I, 0), xRg1.Offset(I + UBound(xRet, 1), 0)) = Application.WorksheetFunction.Transpose(xRet)
                    I = I + UBound(xRet, 1) + 1
                Next
                Application.ScreenUpdating = xUpdate
            End Sub

请试一试,希望对您有所帮助!
该评论由网站上的主持人最小化
如果找不到匹配项,我在哪里/如何更改 VBA 代码以生成“文本”——使用上面的代码,如果找不到值,“#VALUE!” 显示在单元格中。 这不是工作簿的最佳外观。 谢谢你。
这里还没有评论
留下你的意见
以访客身份发帖
×
评价此帖子:
0   产品特性
建议地点

关注我们

版权所有 © 2009 - extendoffice.com。 | 版权所有。 供电 ExtendOffice。 | 网站地图
Microsoft和Office徽标是Microsoft Corporation在美国和/或其他国家的商标或注册商标。
受Sectigo SSL保护