我正在使用以下索引匹配功能来获取公司的名称,其中支出数据与我在单元格BF17中键入的数据相匹配。
=INDEX($AM$16:$BB$16,MATCH(BF17,AM17:BB17,0))
我希望能够做的是在同一个单元格中列出多个结果,并用逗号分隔。
有没有人知道这是否可能,如果有,有人可以告诉我怎么做?
由于
答案 0 :(得分:0)
将此代码插入工作簿中的模块中:
Public Function hLookupList(KeyVal, Vals As Range, Ret As Range) As String
Dim i As Long
Dim vw As Worksheet
Dim rw As Worksheet
Dim RetStr As String
Application.Volatile True
Set vw = Vals.Worksheet
Set rw = Ret.Worksheet
If Vals.Rows.Count > 1 Then
hLookupList = "Too Many Value Rows Selected!"
Exit Function
End If
If Ret.Rows.Count > 1 Then
hLookupList = "Too Many Return Rows Selected!"
Exit Function
End If
If Vals.Columns.Count <> Ret.Columns.Count Then
hLookupList = "Value Range and Return Range must be the same size!"
Exit Function
End If
For i = Vals.Column To Vals.Column + Vals.Columns.Count - 1
If vw.Cells(Vals.Row, i) = KeyVal Then
RetStr = RetStr & rw.Cells(Ret.Row, Ret.Column + i - 1) & ", "
End If
Next i
hLookupList = Left(RetStr, Len(RetStr) - 2)
End Function
然后:
将其插入您想要列表的单元格中:=hLookupList(BF17, $AM$16:$BB$16, $AM$17:$BB$17)
答案 1 :(得分:-1)
不幸的是,没有内置的方法使vlookup或索引/匹配函数返回一个数组。您可以使用自定义公式执行此操作,或者如果您知道结果数量有限,则可以使用一些嵌套查找。 mrexcel.com上的Lewiy编写了一个很棒的自定义函数,我可以找到here。如果要查找大量行,此函数可能会很慢。
由于您正在查找列并希望逗号分隔结果而不是空格,因此您需要修改代码,如下所示:
Function MYVLOOKUP(lookupval, lookuprange As Range, indexcol As Long)
Dim r As Range
Dim result As String
result = ""
For Each r In lookuprange
If r = lookupval Then
result = result & "," & r.offSet(indexcol, 0)
End If
Next r
result = Right(result, Len(result) - 1)
MYVLOOKUP = result
End Function
你的公式将是= MYVLOOKUP(BF17,AM17:BB17,-1) 如果您想在逗号后面添加空格(在结果中),请更改:
result = result & "," & r.offSet(indexcol, 0)
到
result = result & ", " & r.offSet(indexcol, 0)
如果您以前没有使用过自定义函数,请在Excel中按Alt + F11调出VBE,然后将新模块添加到您正在处理的工作簿中(Insert - &gt; Module)。只需将此代码复制并粘贴到那里即可。我推荐Paste Special - &gt;将工作簿发送给任何人之前的值。如果您对此有任何疑问,请与我联系!