Excel索引匹配 - 列出所有结果
我使用以下索引匹配功能来获取花费数据与我在单元格BF17中键入的花费数据匹配的公司的名称。Excel索引匹配 - 列出所有结果
=INDEX($AM$16:$BB$16,MATCH(BF17,AM17:BB17,0))
我想要做的是在同一单元格中列出多个结果,并用逗号分隔这些结果。
有谁知道这是否可能,如果有的话,有人可以告诉我怎么做?
感谢
不幸的是没有内置的方式做一个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,并向您正在使用的工作簿(插入 - >模块)中添加一个新模块。只需复制并粘贴此代码即可。在将工作簿发送给任何人之前,我会建议选择性粘贴 - >值。让我知道如果你有任何问题实施它!
他实际上需要一个hLookup而不是他正在使用的公式来判断vLookup。 – 2014-09-26 13:38:50
的确,我忘了更改函数的名称,但它实际上运行了Hlookup。 Lewiy将offSet(indexcol,0)切换到offSet(0,indexcol-1)的查找。 – NPC 2014-09-26 13:46:04
代码:
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)
谢谢,但我试过这个,它给了我一个#name?错误 – 2014-09-26 13:55:53
我不得不看到你的数据,但它为我工作在测试工作簿上。这将返回该错误的唯一原因是如果您将公式添加到单元格,然后重命名模块或删除/将模块移动到另一个工作簿。 – 2014-09-26 13:57:17
你在哪里放置vba代码?我可以将它放在我的工作簿中而不是放在模块中吗?如果是的话,我需要把它放在一个子? – 2014-09-26 14:05:20
你正在寻找基于公式的解决方案?对于在一个单元格中列出的结果很难做到,结果在单独的单元格中列出更简单,例如,无论是在一列还是在一排 – 2014-09-26 12:57:23