使用lookup函数通过过滤返回值列表

时间:2017-07-07 01:45:47

标签: excel vba excel-vba

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

我想编辑代码以满足我的需求,它可以进一步将多个值过滤到我需要的值。我目前正在使用Instr函数只返回以用户键入的字母开头的值。但是,该函数无法工作,因为结果显示'#VALUE!'。我不知道我哪里出错了。

例如,我在工作表本身的函数中使用了键,'MYVLOOKUP(C2,表!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

1 个答案:

答案 0 :(得分:1)

我认为你正在寻找这个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"的内容。

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

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

示例:

enter image description here