VBA查找值,返回与查找值关联的所有唯一值(在userform文本框中)
我试图做的是使用VBA绕过Vlookup的限制,创建一个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
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