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

时间:2014-09-26 11:14:21

标签: excel

我正在使用以下索引匹配功能来获取公司的名称,其中支出数据与我在单元格BF17中键入的数据相匹配。

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

我希望能够做的是在同一个单元格中列出多个结果,并用逗号分隔。

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

由于

2 个答案:

答案 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;将工作簿发送给任何人之前的值。如果您对此有任何疑问,请与我联系!