2013-01-14 21:43:56 +0000 2013-01-14 21:43:56 +0000
20
20

Excel - 如何用vlookup返回多个值?

我想用Excel来查询并返回一个给定键的多个参考值。**我认为这涉及到数组返回和处理方法,虽然我以前没有处理过这些问题。在Googling中,我开始使用if([[lookuparray]=[value],row[lookuparray])作为解决方案的一部分–尽管我无法让它返回单个匹配…..

例如,如果我有这样的参考数据:

Adam Red
Adam Green
Adam Blue
Bob Red
Bob Yellow
Bob Green
Carl Red

我想得到右边的多个返回值。如果可能的话,用逗号分隔)

Red Adam, Bob, Carl
Green Adam, Bob
Blue Adam
Yellow Bob

(我已经有了左边的关键值–不需要把这些值拉出来)

在这种情况下如何处理多个值的方法,请大家帮忙。谢谢你的帮助。

答案 (4)

14
14
14
2013-01-14 22:17:56 +0000

假设你想用公式的方法(不使用VLOOKUP,但仍然是一个公式),我是这样布置数据的:

我在C12单元格中使用了下面的公式:

=INDEX($C$2:$C$8, SMALL(IF($B12=$B$2:$B$8, ROW($B$2:$B$8)-MIN(ROW($B$2:$B$8))+1, ""), 1))

这是一个数组公式,所以在你复制粘贴到单元格中后,你必须点击Ctrl+Shift+Enter

如果没有剩余的值,就会出现#NUM!错误,我在上传的图片中举了一个黄色的例子。

5
5
5
2013-01-15 13:35:44 +0000
  1. 交换列,使颜色在A列,名称在B列,然后根据颜色进行排序。在C2中的公式(把它复制到列中): =IF(A2<>A1,B2,C1 & “,”,“,”&B2)

  2. 在D2中的公式(复制到列中): =A2<>A3

    1. 在D列中过滤 “TRUE "以得到想要的结果。请看下面的内容。

4
4
4
2015-02-23 13:45:45 +0000

下面是VBA为您提供的解决方案。首先,结果是这样的:

的代码是这样的:

Option Explicit
Function LookupCSVResults(lookupValue As Variant, lookupRange As Range, resultsRange As Range) As String

    Dim s As String 'Results placeholder
    Dim sTmp As String 'Cell value placeholder
    Dim r As Long 'Row
    Dim c As Long 'Column
    Const strDelimiter = "|||" 'Makes InStr more robust

    s = strDelimiter
    For r = 1 To lookupRange.Rows.Count
        For c = 1 To lookupRange.Columns.Count
            If lookupRange.Cells(r, c).Value = lookupValue Then
                'I know it's weird to use offset but it works even if the two ranges
                'are of different sizes and it's the same way that SUMIF works
                sTmp = resultsRange.Offset(r - 1, c - 1).Cells(1, 1).Value
                If InStr(1, s, strDelimiter & sTmp & strDelimiter) = 0 Then
                    s = s & sTmp & strDelimiter
                End If
            End If
        Next
    Next

    'Now make it look like CSV
    s = Replace(s, strDelimiter, ",")
    If Left(s, 1) = "," Then s = Mid(s, 2)
    If Right(s, 1) = "," Then s = Left(s, Len(s) - 1)

    LookupCSVResults = s 'Return the function

End Function
3
3
3
2013-01-14 21:59:35 +0000

如果你想要一个公式的方法,那么在单独的单元格中得到结果就简单多了,所以我们假设你的第一个表是A2:B8,颜色在D2:D5中再次列出。试着在E2

=IFERROR(INDEX($A$2:$A$8,SMALL(IF($B$2:$B$8=$D2,ROW($B$2:$B$8)-ROW($B$2)+1),COLUMNS($E2:E2))),"")中尝试这个公式,用CTRL+SHIFT+ENTER确认

=IF(COLUMNS($E2:E2)>COUNTIF($B$2:$B$8,$D2),"",INDEX($A$2:$A$8,SMALL(IF($B$2:$B$8=$D2,ROW($B$2:$B$8)-ROW($B$2)+1),COLUMNS($E2:E2)))),然后横着复制下来。

公式假设为Excel 2007或更高版本–如果是更早的版本,你可以用COUNTIF代替IFERROR,即

&007