Ich verwende Microsoft Excel 2016. Und ich habe 2 Tabellen auf verschiedenen Blättern.
sheet1.tbl1 {
key1,
key2,
val1,
fun1,
fun2
}
sheet2.tbl2 {
key1,
key2,
val1,
val2
}
Ich möchte Werte mithilfe einer Formel oder anderer Methoden von nach nach bringen. Genauer gesagt, „join by“ sheet1.tbl1
und „bring from“ von nach nach nach bringen . Die Schlüssel sind in beiden Tabellen eindeutig, also reicht die erste Übereinstimmung aus.sheet2.tbl2
key1, key2
val1, val2
sheet2.tbl2
fun1, fun2
sheet1.tbl1
Ich habe Formel versucht
=INDEX(rls, MATCH(tbl1[[key1]:[key2]], tbl2[key1]:[key2]], 0),3)
Aber es funktioniert nicht.
Ich möchte auch keine Erweiterungen verwenden, sondern dies mithilfe integrierter Funktionen erreichen. Und zwar vorzugsweise mithilfe der Tabellenspaltensyntax ( tbl1[[key1]:[key2]]
).
Antwort1
Die Schwierigkeit liegt in der Tastenkombination in der zweiten Tabelle. Sie erschwert beispielsweise die Verwendung . Für oder VLOOKUP()
ist dies jedoch kein besonderes Problem .INDEX/MATCH
XLOOKUP()
Zum Beispiel:
=XLOOKUP($A1:$A9&"|"&$B1:$B9, $H$20:$H$28&"|"&$I$20:$I$28, J20:J28,,0)
Sie kombinieren die Schlüssel mit dem Vereinigungsoperator &
und trennen sie durch ein unerwartetes Zeichen, das in den vorhandenen Daten nicht vorhanden ist, wie z. B. |
. (Sie können ein Zeichen auswählen und dann in den Schlüsseln danach suchen, um sicherzustellen, dass es nicht verwendet wird.) Auf diese Weise werden unerwartete Duplikate vermieden. Beispiel: Ein Schlüsselpaar ist Add
und , ress
während ein anderes Ad
und ist dress
. Mit einem Zeichen dazwischen erhält man Add|ress
und Ad|dress
statt zwei Instanzen von Address
.
Das Kombinieren ist für XLOOKUP()
und MATCH()
(die Hälfte von , INDEX/MATCH
in der Sie es tun) unkompliziert. Beide können auch problemlos mit den Arrays für diese Teile umgehen, sodass Sie eine einzelne Formel erstellen können.
In aktuellen Versionen ist das der Fall, SPILL
was gut funktioniert. In älteren Versionen (Sie haben mit 2016 getaggt) ist das nicht der Fall, sodass Sie entweder {CSE}
einen Eintrag verwenden oder je nach Bedarf die Spalte kopieren und einfügen müssen.
Für neuere Versionen XLOOKUP()
gibt es eine einfache und offensichtliche Formel (gut für die Wartung). Für die älteren Versionen INDEX/MATCH
gibt es nur wenige Abstriche:
=INDEX($J$20:$J$28, MATCH($A1:$A9&"|"&$B1:$B9, $H$20:$H$28&"|"&$I$20:$I$28,,0))
Wenn Sie beides handhaben müssen, sollten Sie diese Option verwenden.
Keine der Formeln unterstützt einen Zielbereich mit zwei Spalten, daher ist (in diesen Formeln) J20:K28 nicht verfügbar.
(Aber natürlich kennt vielleicht jemand eine nette Methode, es verfügbar zu machen!)
Es gibt eine nette Methode, FILTER/FILTER
die Sie aber nicht mit Excel-2016-Benutzern verwenden können, sodass sie Ihnen heute nicht weiterhilft. Könnte jedoch eine hilfreiche Technik in zukünftigen Arbeitsmappen sein:
=FILTER(FILTER(H20:K28,SORT(A1:A9&"|"&B1:B9)=SORT(H20:H28&"|"&I20:I28)),{0,0,1,1})
Das Innere FILTER()
wählt die Daten aus. Natürlich sind die Schlüssellisten mit ziemlicher Sicherheit nicht in derselben Reihenfolge (oder "=F12, =F13, =F14 usw. würde fast funktionieren, oder?). Verwenden Sie also SORT()
für jedes Schlüsselkombinationsarray, um sie in dieselbe Reihenfolge zu bringen. Wenn es in der zweiten Tabelle Schlüsselpaare gibt, die nicht in der ersten sind, müssen Sie diese entweder löschen oder einen anderen Pfad wählen.
Das Äußere FILTER
funktioniert dann ähnlich wie INDEX()
bei Verwendung einer Array-Konstante zum Auswählen der auszugebenden Spalten (oder Zeilen). Sie könnten INDEX()
stattdessen verwenden, aber nicht so einfach. FILTER()
verwendet die einfache Array-Konstante als Funktion „Spalte anzeigen/Spalte nicht anzeigen“. Sie geben also nur die beiden Spalten aus, die Sie ausgeben möchten.
Es hat den Vorteil, dass es eine mehrdimensionale Ausgabe bereitstellt, einschließlich SPILL
-ing, also einer Formel in einer Zelle und Sie haben Ihre gesamte Ausgabe.
Sie könnten sogar das verwenden FILTERXML()
, was Benutzer von 2016 getan hätten, aber obwohl es eine sehr schöne, clevere Verwendung davon ist (insbesondere, da die Methode die Arrays beider Spalten im einzelnen XPATH erstellen würde) usually
, wäre es in diesem Fall nur eine sehr einfache Übung zum Zahlenrechnen auf niedriger Ebene. Kludgy... „bis zum Maximum“. Und es könnte zu Problemen mit der internen Array-String-Länge kommen.
Dabei ist noch nicht einmal die Hilfsspaltenroute (für die kombinierten Schlüssel) oder ihre Verwandte, die die kombinierten Schlüssel in benannte Bereiche einfügt, um sie leicht adressierbar zu machen, erwähnt.
Ich würde die INDEX/MATCH
Methode für deinen Benutzermix empfehlen.