2017-02-27 3 views
2

Ich versuche, ein vlookup unter einem Umstand von zuerst dann Nachname, um ein Alter zu bekommen. Dies wird in Spalte A und dann in Spalte B geschehen. Wenn in Spalte A gefunden, Weiter zu Spalte B, Wenn in Spalte B gefunden, lege Alter in J3, das aus Spalte C kommt, sonst "None". HierVlookup mit 2 Spalten, um eine andere Referenz

ein Beispiel:

J1 = John 
J2 = Doe 
J3 = =VLOOKUP J1 & J2,A1:C50,3,FALSE) 

J3 ist, was ich bisher haben. Muss ich ein Vlookup verschachteln, um Spalte A und dann Spalte B zu überprüfen, um das Alter zu erhalten? Hier

ist ein Beispiel für die Tabellenliste:

A  B C 
Jeff Vel 80 
John Fly 25 
Jake Foo 20 
John Doe 55 

J3 = 55.

+2

Da Sie eine Nummer aus einer Liste suchen, können Sie '= SUMME (C: C, A: A, J1, B: B, J2) verwenden, vorausgesetzt, dass Ihre Namen eindeutig sind. Sie könnten auch eine dritte Spalte erstellen, die die Namen verkettet und danach eine Suche durchführt. Insert C als neue Spalte C1 (und nach unten kopieren) '= A1 & B1'. Dann in J3 '= vlookup (J1 & J2, C: C, 2, falsch)'. – JNevill

+2

Siehe [Excel: Übereinstimmung mit zwei Spalten und Ausgabe dritter ... UND ... in jeder Spalte gibt es mehrere Instanzen] (http://stackoverflow.com/questions/31979340/excel-match-two-columns-and-output-third-and) -there-sind-multiple-instance/31980952 # 31980952) – Jeeped

+1

@Jeeped warum nicht Mjölnir dieser Thread? –

Antwort

5

Viele Möglichkeiten:

  1. mit Nummer Handel zurückgibt:

Wenn Ihr Rückgabewerte sind Zahlen und die Übereinstimmung ist einzigartig (es gibt nur einen John Doe im d ata) oder Sie möchten die Rücksendungen zusammenfassen, wenn es Vielfache gibt, dann ist die Verwendung von SUMMIFS die schnellste Methode.

=SUMIFS(C:C,A:A,J1,B:B,J2) 

enter image description here


  1. Bei nicht numerischen kehrt

Wenn die Erträge nicht numerisch sind, oder es Multiples dann gibt es zwei Methoden, um Holen Sie sich die erste Übereinstimmung in der Liste:

a. Ein Helfer Säule:

In einer vierten Spalte setzen die folgende Formel:

=A1&B1 

und kopieren Sie in der Liste

enter image description here

Dann INDEX/MATCH verwenden:

=INDEX(C:C,MATCH(J1&J2,D:D,0)) 

enter image description here

b. Die Matrixformel:

Wenn Sie nicht wollen oder können die vierte Spalte dann nicht erstellen verwenden, um ein Array-Typ Formel:

=INDEX(C:C,AGGREGATE(15,6,ROW($A$1:$A$4)/(($A$1:$A$4=J1)*($B$1:$B$4=J2)),1)) 

Array-Typ Formeln müssen die Größe der Daten auf den Datensatz begrenzen.

enter image description here

Wenn Ihr Datensatz Änderungen Größen regelmäßig können wir die oben dynamisch sein ändern, indem mehr INDEX/MATCH Zugabe der letzten Zelle mit Daten zurück:

=INDEX(C:C,AGGREGATE(15,6,ROW($A$1:INDEX($A:$A,MATCH("ZZZ",A:A)))/(($A$1:INDEX($A:$A,MATCH("ZZZ",A:A))=J1)*($B$1:INDEX($B:$B,MATCH("ZZZ",A:A))=J2)),1)) 

Dies wird die Daten ermöglichen eingestellt, um zu wachsen oder zu schrumpfen und die Formel wird nur diejenigen durchlaufen, die Daten und nicht die vollständige Spalte haben.

Die oben beschriebenen Methoden werden in der Reihenfolge Best-Better-Good festgelegt.


  1. Um mehrere Antworten in einer Zelle

zu bekommen Wenn Sie nicht summieren möchten, oder die Rückgabewerte sind Text und es gibt mehrere Instanzen von John Doe und Sie möchten, dass alle Werte in einer Zelle zurückgegeben werden:

a. Wenn Sie Office 365 Excel haben, können Sie ein Array Form von TEXTJOIN verwenden:

=TEXTJOIN(",",TRUE,IF(($A$1:$A$4=J1)*($B$1:$B$4=J2),$C$1:$C$4,"")) 

Als eine Matrixformel muss es mit bestätigt werden Ctrl-Shift-Enter statt Eingabe, wenn Bearbeitungsmodus zu verlassen. Wenn es richtig gemacht wird, wird Excel {} um die Formel setzen.

Wie die AGGREGATE Formel oben muss es auf den Datensatz beschränkt werden. Die Bereiche können mit den INDEX/MATCH-Funktionen wie oben auch dynamisch gemacht werden.

enter image description here

b. Wenn ein Office 365 Excel nicht dann fügen Sie diesen Code zu einem Modul an der Arbeitsmappe angehängt:

Function TEXTJOIN(delim As String, skipblank As Boolean, arr) 
    Dim d As Long 
    Dim c As Long 
    Dim arr2() 
    Dim t As Long, y As Long 
    t = -1 
    y = -1 
    If TypeName(arr) = "Range" Then 
     arr2 = arr.Value 
    Else 
     arr2 = arr 
    End If 
    On Error Resume Next 
    t = UBound(arr2, 2) 
    y = UBound(arr2, 1) 
    On Error GoTo 0 

    If t >= 0 And y >= 0 Then 
     For c = LBound(arr2, 1) To UBound(arr2, 1) 
      For d = LBound(arr2, 1) To UBound(arr2, 2) 
       If arr2(c, d) <> "" Or Not skipblank Then 
        TEXTJOIN = TEXTJOIN & arr2(c, d) & delim 
       End If 
      Next d 
     Next c 
    Else 
     For c = LBound(arr2) To UBound(arr2) 
      If arr2(c) <> "" Or Not skipblank Then 
       TEXTJOIN = TEXTJOIN & arr2(c) & delim 
      End If 
     Next c 
    End If 
    TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim)) 
End Function 

Dann nutzen Sie die TEXTJOIN() Formel, wie oben beschrieben.

+1

Ich mochte wirklich die Verwendung von SUMME. Einfach und doch innovativ. Ich habe etwas gelernt. –