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

我想要做的是使用VBA来解决Vlookup的限制,并创build一个用户窗体来显示客户编号的相关项目。 我有一列填充重复的值(客户号码),然后旁边的列有唯一的值(客户事件)。 这是我的桌子的一小块:

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

我创build了一个用户表单,允许我们的员工searchA列,并返回列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函数来获得这个sorting。 我写的function,可以做得更强大; 但是这应该给你基本的想法。

在这里输入图像说明

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

 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 

我希望这会有一些帮助! 祝你好运。