VBA查找值,返回与查找值关联的所有唯一值(在userform文本框中)

VBA查找值,返回与查找值关联的所有唯一值(在userform文本框中),vba,excel,userform,Vba,Excel,Userform,我试图做的是使用VBA绕过Vlookup的限制,创建一个Userform,显示客户编号的相关项目。我有一个满是重复值(客户编号)的列,然后它旁边的列有唯一的值(客户事件)。这是我桌子上的一小段: CustNum CustEvent 123 Called In 123 Placed Order 345 Filed Complaint 345 Called In 345 Refund Approved

我试图做的是使用VBA绕过Vlookup的限制,创建一个Userform,显示客户编号的相关项目。我有一个满是重复值(客户编号)的列,然后它旁边的列有唯一的值(客户事件)。这是我桌子上的一小段:

CustNum      CustEvent
123          Called In
123          Placed Order
345          Filed Complaint
345          Called In
345          Refund Approved
我创建了一个用户表单,允许我们的员工在a列中搜索,它返回B列中的内容。我使用vLookup实现了这一点,但每个人都知道vLookup的局限性,因为它只返回它遇到的B列中的第一个值

我需要的是让我的UserForm文本框显示五大客户事件点击:

Search: 123

Called In, Placed Order
最终,这将通过我没有写访问权的SQL表运行,因此更改数据不是一个选项

我的代码:

Dim x As Long

x = cnum.Value

textbox1.Value = Application.WorksheetFunction.VLookup(x, Range("A2:B5"), 2, False)

可以使用VBA函数对其进行排序。我写的函数,可以做得更健壮;但这应该给你一个基本的想法

这背后的代码是一个简单的函数,它将ID作为参数,然后返回所有相关记录。基于艾伦·布朗的想法


我希望这会有所帮助!祝你好运

为什么不对表运行一个单独的
selectdistinct
查询呢?您可以使用一个高级过滤器来实现这一点。我对SQL方面还是很陌生。你有这方面的链接或例子吗?
Public Function ConcatRelated(InputID As Long) As String
    Dim lastRow As Long, iCtr As Long, retStr As String

    lastRow = Range("A65536").End(xlUp).Row

    For iCtr = 1 To lastRow
        If Cells(iCtr, 1).Value = InputID Then
            retStr = retStr & Cells(iCtr, 2).Value & ", "
        End If
    Next

    If Len(retStr) > 0 Then _
        retStr = Left(retStr, Len(retStr) - 2)

    ConcatRelated = retStr
End Function