我目前正在使用查找功能返回多个值。我从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
答案 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"
开头的值。此参数可选:如果您不想进行任何过滤,可以省略它。
返回的值是找到的所有匹配项的逗号分隔列表。
示例: