it-swarm.com.de

Excel - Wie kann ich nachschlagen, um mehrere Werte zurückzugeben?

Ich möchte Excel verwenden, um mehrere Referenzwerte für einen bestimmten Schlüssel nachzuschlagen und zurückzugeben. VLookup macht etwas sehr Ähnliches zu dem, was ich brauche - gibt aber nur eine einzige Übereinstimmung zurück.

Ich gehe davon aus, dass es sich um Array-Rückgabe- und -Handhabungsmethoden handelt, obwohl ich mich zuvor noch nicht damit befasst habe. Einige Googler beginnen, sich auf das if ([lookuparray] = [value], row [lookuparray]) als Teil einer Lösung zu stützen - obwohl ich es nicht schaffen kann, ein einzelnes Match zurückzugeben ...

Zum Beispiel, wenn ich diese Referenzdaten habe:

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

Ich versuche, die mehreren Rückgabewerte auf der rechten Seite zu erhalten. (Komma getrennt, falls möglich)

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

(Ich habe bereits den Schlüsselwert auf der linken Seite - diese Werte müssen nicht herausgezogen werden.)

Jede Hilfe, um in diesem Zusammenhang mit mehreren Werten umzugehen, ist willkommen. Vielen Dank.

18
overflew

Angenommen, Sie möchten einen Formelansatz wie angegeben (ohne VLOOKUP, aber dennoch mit einer Formel), dann habe ich die Daten folgendermaßen angeordnet:

Data Layout

Ich habe dann die folgende Formel in Zelle C12 verwendet:

=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))

Dies ist eine Array-Formel. Nachdem Sie sie kopiert und in die Zelle eingefügt haben, müssen Sie Ctrl+Shift+Enter drücken. Ich habe es dann einfach nach rechts und unten gezogen.

Wenn kein Wert mehr übrig ist, wird der Fehler #NUM! angezeigt. Im Beispiel für das hochgeladene Bild habe ich ein Beispiel für Gelb angegeben.

Ich denke, ein VBA/Makro-Ansatz wäre eine bessere Lösung, wenn Sie Tonnen von Zeilen haben.

12
Dan
  1. Tauschen Sie die Spalten aus, sodass sich die Farben in Spalte A und die Namen in Spalte B befinden, und sortieren Sie dann nach der Farbe.

  2. Formel in C2 (in die Spalte kopieren): = IF (A2 <> A1, B2, C1 & "," & B2)

  3. Formel in D2 (in die Spalte kopieren): = A2 <> A3

  4. Filtern Sie nach "TRUE" in Spalte D, um die gewünschten Ergebnisse zu erhalten. Siehe unten:

enter image description here

5
F106dart

Hier ist die VBA-Lösung für Sie. Zunächst sehen die Ergebnisse so aus:

Screenshot

Und hier ist der Code:

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
Engineer Toast

Wenn Sie einen Formelansatz wünschen, ist es viel einfacher, die Ergebnisse in separaten Zellen abzurufen. Nehmen wir also an, dass Ihre erste Tabelle A2: B8 lautet und die Farben in D2: D5 erneut aufgeführt sind. Versuchen Sie diese Formel in 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))),"")

mit CTRL+SHIFT+ENTER bestätigt und quer und runter kopiert. Wenn Streichhölzer ausgehen, erhält man Leerzeichen.

Die Formel geht von Excel 2007 oder höher aus - wenn Sie eine frühere Version verwenden, können Sie COUNTIF anstelle von IFERROR verwenden, d. H.

=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))))

3
barry houdini