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 for Applications 窗口。

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,“,”) 放入要返回結果的空白單元格。 然後按 Enter 獲得結果的關鍵,請參見屏幕截圖:

doc返回多個值,以逗號分隔2

備註:在以上公式中:

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

A2:B15: 是您要獲取數據的數據范圍;

2:數字2是要返回匹配值的列號;

,:逗號是您要分隔多個值的分隔符。

您可以根據需要更改它們。


使用Kutools for Excel在一個逗號分隔的單元格中返回多個查找值

如果你有 Excel的Kutools,此任務將不再是問題。 的 高級合併行 實用程序可以幫助您基於列組合所有相對值。

Excel的Kutools : 帶有300多個便捷的Excel加載項,可以在30天內免費試用

安裝後 Excel的Kutools,請執行以下操作:

1。 選擇要基於列組合所有匹配值的數據范圍。

2。 點擊 庫工具 > 合併與拆分 > 高級合併行,請參見屏幕截圖:

3。 在 根據列合併行 對話框中,單擊要合併的列名,然後單擊 首要的關鍵 按鈕,請參見屏幕截圖:

doc返回多個值,以逗號分隔4

4。 然後,單擊要合併其匹配值的其他列名,然後單擊 結合 選擇一個分隔符以分隔組合值,請參見屏幕截圖:

doc返回多個值,以逗號分隔5

5。 然後點擊 OK 按鈕,所有具有相同值的對應單元格都已合併為一個單元格,並以逗號分隔,請參見屏幕截圖:

doc返回多個值,以逗號分隔6 2 doc返回多個值,以逗號分隔7

單擊以了解有關此高級合併行實用程序的更多詳細信息……

立即下載和免費試用Excel的Kutools!


演示:使用Kutools for Excel在一個逗號分隔的單元格中返回多個查找值

Excel的Kutools:具有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底部
按評論排序
留言 (16)
5中的5評分 · 2評級
網站主持人對此評論進行了最小化
當我要粘貼並保存模塊時,出現一條彈出消息,表明功能兼容性檢查器嚴重丟失
網站主持人對此評論進行了最小化
感謝這篇文章。 你知道我將如何操作這正在創建的兩個單獨的整數嗎? 例如,假設 '=SingleCellExtract' 函數現在產生 (1 , 2)。 有沒有辦法在它旁邊有一個單元格 (1+.5 , 2+.5)?
網站主持人對此評論進行了最小化
這有效,但主要減慢了我的excel! 有什麼技巧可以幫助加快速度嗎?
網站主持人對此評論進行了最小化
這根本行不通。 我無法讓它在我自己的應用程序中工作,所以我複制/粘貼了 vba 和公式,每次都返回錯誤
網站主持人對此評論進行了最小化
謝謝,首先我設法讓它工作而不會降低性能。 我使用的是值而不是文本,所以我的問題是我想帶回所有那些在列表中少於 19 分的人。 單細胞提取物可以為此工作還是必須是特定值?
網站主持人對此評論進行了最小化
當範圍超過 154 行(即:B154)時,VB 命令會中斷......
網站主持人對此評論進行了最小化
如果增加數組大小會彈出錯誤
網站主持人對此評論進行了最小化
當 2 個條件匹配時,在一個逗號分隔的單元格中返回多個查找值
A2=B2 然後由“SingleCellExtract”從範圍中得出結果 - 請......
網站主持人對此評論進行了最小化
早上好,

VBA 代碼與我的工作表完美配合,非常清晰和簡單,但是,我試圖找到一種方法來告訴 excel 只返回唯一值。 使用相同的代碼可以嗎?
網站主持人對此評論進行了最小化
嗨,

我想要多個值的精確驗證代碼,每個值用逗號和空格分隔。

示例:
露西、湯姆、尼科爾、阿卡什、蘋果

如果您有任何建議,請重播。
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

請試一試,希望對您有所幫助!
這裡還沒有評論
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

版權所有©2009 - 萬維網。extendoffice.com。 | 版權所有。 供電 ExtendOffice。 |
Microsoft和Office徽標是Microsoft Corporation在美國和/或其他國家的商標或註冊商標。
受Sectigo SSL保護