Excel-Formel: XLOOKUP mit komplexen Mehrfachkriterien -

Inhaltsverzeichnis

Zusammenfassung

Um Daten basierend auf mehreren komplexen Kriterien zu suchen, können Sie die XLOOKUP-Funktion mit mehreren Ausdrücken verwenden, die auf boolescher Logik basieren. Im gezeigten Beispiel lautet die Formel in G5:

=XLOOKUP(1,(LEFT(B5:B16)="x")*(C5:C16="east")*NOT(MONTH(D5:D16)=4),B5:E16)

Mit den Standardeinstellungen von XLOOKUP für den Übereinstimmungsmodus (genau) und den Suchmodus (zuerst bis zuletzt) ​​stimmt die Formel mit dem ersten Datensatz überein, wobei:

Konto beginnt mit "x" UND Region ist "Ost" und Monat ist NICHT April.

Dies ist der vierte Datensatz (Zeile 8) im gezeigten Beispiel.

Erläuterung

Normalerweise ist die XLOOKUP-Funktion so konfiguriert, dass in einem Sucharray, das im Arbeitsblatt vorhanden ist, nach einem Wert gesucht wird. Wenn jedoch die Kriterien, die zum Abgleichen eines Werts verwendet werden, komplexer werden, können Sie mithilfe der Booleschen Logik ein Sucharray erstellen, das nur aus Einsen und Nullen besteht, und dann nach dem Wert 1 suchen. Dies ist der in diesem Beispiel verwendete Ansatz:

=XLOOKUP(1,boolean_array,result_array)

In diesem Beispiel sind folgende Kriterien erforderlich:

Konto beginnt mit "x" UND Region ist "Ost" und Monat ist NICHT April.

Für jedes der drei oben genannten separaten Kriterien verwenden wir einen separaten logischen Ausdruck. Der erste Ausdruck verwendet die LEFT-Funktion, um zu testen, ob das Konto mit "x" beginnt:

LEFT(B5:B16)="x" // account begins with "x"

Da wir zwölf Werte prüfen, ist das Ergebnis ein Array mit zwölf Werten wie folgt:

(TRUE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE;TRUE)

Der zweite Ausdruck testet, ob Region "Ost" ist, indem der Operator gleich (=) verwendet wird:

C5:C16="east" // region is east

Nach wie vor erhalten wir ein weiteres Array mit zwölf TRUE FALSE-Werten:

(FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;TRUE)

Der dritte Ausdruck muss den Monat April ausschließen. Der einfachste Weg, dies zu tun, besteht darin, den Monat April direkt mit der Funktion MONTH zu testen:

MONTH(D5:D16)=4 // month is April

Verwenden Sie dann die NOT-Funktion, um das Ergebnis umzukehren:

NOT(MONTH(D5:D16)=4) // month is not April

Dadurch wird ein Array erstellt, das "nicht April" korrekt beschreibt:

(FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE)

Als nächstes werden alle drei Arrays miteinander multipliziert, und die mathematische Operation zwingt die Werte TRUE und FALSE auf 1s und 0s:

(1;0;1;1;1;0;0;0;1;1;0;1)* (0;0;1;1;1;0;1;0;0;1;0;1)* (0;0;0;1;1;1;1;1;1;1;1;1)

In der Booleschen Arithmetik funktioniert die Multiplikation wie die logische Funktion AND, sodass das Endergebnis ein einzelnes Array wie das folgende ist:

(0;0;0;1;1;0;0;0;0;1;0;1)

Die Formel kann jetzt folgendermaßen umgeschrieben werden:

=XLOOKUP(1,(0;0;0;1;1;0;0;0;0;1;0;1),B5:E16)

Mit 1 als Suchwert und Standardeinstellungen für den Übereinstimmungsmodus (genau) und den Suchmodus (vorletzter) stimmt XLOOKUP mit der ersten 1 (vierte Position) überein und gibt die entsprechende Zeile im Ergebnisarray zurück, nämlich B8: E8.

Letztes Spiel

Indem Sie das optionale Argument für den Suchmodus auf -1 setzen, können Sie die "letzte Übereinstimmung" mit denselben Kriterien wie folgt suchen:

=XLOOKUP(1,(LEFT(B5:B16)="x")*(C5:C16="east")*NOT(MONTH(D5:D16)=4),B5:E16,,,-1)

Interessante Beiträge...