Excel索引匹配 - 列出所有结果

问题描述:

我使用以下索引匹配功能来获取花费数据与我在单元格BF17中键入的花费数据匹配的公司的名称。Excel索引匹配 - 列出所有结果

=INDEX($AM$16:$BB$16,MATCH(BF17,AM17:BB17,0)) 

我想要做的是在同一单元格中列出多个结果,并用逗号分隔这些结果。

有谁知道这是否可能,如果有的话,有人可以告诉我怎么做?

感谢

+0

你正在寻找基于公式的解决方案?对于在一个单元格中列出的结果很难做到,结果在单独的单元格中列出更简单,例如,无论是在一列还是在一排 – 2014-09-26 12:57:23

不幸的是没有内置的方式做一个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,并向您正在使用的工作簿(插入 - >模块)中添加一个新模块。只需复制并粘贴此代码即可。在将工作簿发送给任何人之前,我会建议选择性粘贴 - >值。让我知道如果你有任何问题实施它!

+0

他实际上需要一个hLookup而不是他正在使用的公式来判断vLookup。 – 2014-09-26 13:38:50

+0

的确,我忘了更改函数的名称,但它实际上运行了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)

+0

谢谢,但我试过这个,它给了我一个#name?错误 – 2014-09-26 13:55:53

+0

我不得不看到你的数据,但它为我工作在测试工作簿上。这将返回该错误的唯一原因是如果您将公式添加到单元格,然后重命名模块或删除/将模块移动到另一个工作簿。 – 2014-09-26 13:57:17

+0

你在哪里放置vba代码?我可以将它放在我的工作簿中而不是放在模块中吗?如果是的话,我需要把它放在一个子? – 2014-09-26 14:05:20