我要做的是使用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)
答案 0 :(得分:0)
您可以使用VBA函数对其进行排序。我写的功能,可以做得更健壮;但这应该给你基本的想法。
这背后的代码是一个简单的函数,它将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
我希望这会有所帮助!祝好运。