使用查找function通过过滤返回值列表

我目前正在使用查找函数来返回多个值。 我从Extend Office获得了这个function。 https://www.extendoffice.com/documents/excel/2706-excel-vlookup-return-multiple-values-in-one-cell.html

我想编辑代码来满足我的需求,它可以进一步过滤多个值,只有我需要。 我目前正在使用Instr函数来返回只有用户键入的字母开头的值。但是,该函数不能正常显示“#VALUE!”。 我不知道我哪里出了问题。

例如,我在工作表本身的函数中使用了键'MYVLOOKUP(C2,Table!A:B,2,“J”)'。 这意味着我只想返回以'J'开始的值,但是它返回#VALUE !.

Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long, filter As String) Dim rng As Range Dim xResult As String Dim result As Integer xResult = vbNullString 'the next line trims pWorkRng down to the .UsedRange Set pWorkRng = Intersect(pWorkRng, pWorkRng.Parent.UsedRange) For Each rng In pWorkRng If rng = pValue Then result = InStr(rng.Value, filter, vbTextCompare) If result = 1 Then xResult = xResult & rng.Offset(0, pIndex - 1) & "," Else End If End If Next MYVLOOKUP = Trim(xResult) End Function 

我认为你正在寻找这个UDF:

 Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long, _ Optional filter As String = "*") Dim rng As Range, ret As String For Each rng In Intersect(pWorkRng.Columns(1), pWorkRng.Parent.UsedRange) If rng Like pValue Then If rng(1, pIndex) Like filter Then _ ret = ret & IIf(Len(ret), ",", "") & rng(1, pIndex) Next MYVLOOKUP = ret End Function 

注意如何使用它:

  • 第一个参数是第一列上的完全匹配。 你可以在内部使用通配符(*) ,比如"xx*"匹配任何以"xx""*yy*"开始的匹配任何包含"yy"

  • 最后一个参数是一个类似的filter,但在返回的值。 因此,您可以使用"J*"将返回值限制为以"J"开头的值。 此参数是可选的:如果您不想进行任何过滤,则可以省略该参数。

  • 返回值是所有find的匹配的逗号分隔列表。

例:

在这里输入图像说明