Excel-formel: XLOOKUP med komplexa flera kriterier -

Innehållsförteckning

Sammanfattning

För att slå upp data baserat på flera komplexa kriterier kan du använda XLOOKUP-funktionen med flera uttryck baserat på boolesk logik. I exemplet som visas är formeln i G5:

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

Med XLOOKUPs standardinställningar för matchningsläge (exakt) och sökläge (första till sista) matchar formeln den första posten där:

kontot börjar med "x" OCH regionen är "öst", och månaden är INTE april.

vilket är den fjärde posten (rad 8) i det visade exemplet.

Förklaring

Normalt är XLOOKUP-funktionen konfigurerad för att leta efter ett värde i en uppslagsmatris som finns i kalkylbladet. Men när kriterierna som används för att matcha ett värde blir mer komplexa, kan du använda boolesk logik för att skapa en uppslagsmatris i farten som bara består av 1s och 0s och sedan leta efter värdet 1. Detta är metoden som används i detta exempel:

=XLOOKUP(1,boolean_array,result_array)

I detta exempel är de nödvändiga kriterierna:

kontot börjar med "x" OCH regionen är "öst", och månaden är INTE april.

För vart och ett av de tre separata kriterierna ovan använder vi ett separat logiskt uttryck. Det första uttrycket använder VÄNSTER-funktionen för att testa om kontot börjar med "x":

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

Eftersom vi kontrollerar tolv värden är resultatet en matris med tolv värden så här:

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

Det andra uttrycket testar om Region är "öst" med operatören lika med (=):

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

Som tidigare får vi en annan matris med tolv Sanna FALSKA värden:

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

Det tredje uttrycket måste utesluta april månad. Det enklaste sättet att göra detta är att testa april månad direkt med MONTH-funktionen:

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

Använd sedan INTE-funktionen för att vända resultatet:

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

som skapar en matris som korrekt beskriver "inte april":

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

Därefter multipliceras alla tre matriserna tillsammans, och matteoperationen tvingar SANT och FALSKT till 1s och 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)

I boolesk aritmetik fungerar multiplikation som den logiska funktionen OCH, så det slutliga resultatet är en enda array som denna:

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

Formeln kan nu skrivas om så här:

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

Med 1 som uppslagsvärde och standardinställningar för matchningsläge (exakt) och sökläge (första till sista) matchar XLOOKUP första 1 (fjärde position) och returnerar motsvarande rad i resultatmatrisen, vilket är B8: E8.

Sista matchen

Genom att ställa in valfritt argument för sökläge till -1 kan du hitta den "senaste matchningen" med samma kriterier som detta:

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

Intressanta artiklar...