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

时间:2014-10-08 16:14:42

标签: excel vba excel-vba userform

我要做的是使用VBA来解决Vlookup的限制,并创建一个Userform,它将显示客户编号的相关项目。我有一个满了重复值(客户编号)的列,然后它旁边的列有唯一值(客户事件)。这是我桌子的一小部分:

CustNum      CustEvent
123          Called In
123          Placed Order
345          Filed Complaint
345          Called In
345          Refund Approved

我创建了一个userform,允许我们的员工搜索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)

1 个答案:

答案 0 :(得分:0)

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

enter image description here

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

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

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