Topp 5 avancerade Excelfunktioner (1/5) FILTER

Topp 5 avancerade Excelfunktioner (1/5) FILTER

FILTER

FILTER-funktionen är utan tvivel en av mina favoritfunktioner i Excel. I sin enklaste form filtrerar funktionen rader (eller värden) i ett dataunderlag baserat på ett uttryck som vi skriver i formeln. Även om vi i formeln kan ange ett logiskt uttryck som används för filtrering så fungerar formeln egentligen med vilken som helst sekvens av booleska värden – givet att den är lika lång som dataunderlaget. Denna fantastiska funktionalitet tillåter oss att basera filtreringen på mer avancerad logik, vilket vi ska se på strax.

Hämta exempelfilen:

FILTER.xlsx

Syntax:
FILTER( matris ; inkludera ; [om tom])

Här följer ett exempel med funktionen i sin enklaste form. Funktionen filtrerar hela tabellen till vänster genom att inkludera alla poster där värdet i kolumnen Produkt är lika med ”Skrivbord”.

Vi ser kort på vad som sker under ytan när funktionen körs. Det logiska uttrycket i argumentet inkludera returnerar följande matris med värden 1 eller 0 för varje rad – beroende på om uttrycket är SANT eller FALSKT. Denna matris används sedan för att evaluera vilka värden som inkluderas från den ursprungliga tabellen.


Invertera resultatet

För att förstå nyttan med denna funktionalitet ser vi på följande exempel. Vad om vi vill inkludera alla rader som INTE uppfyller kraven?

Vad vi behöver göra är alltså att invertera sekvensen
{1;0;1;0;0;1;1;0;0} till {0;1;0;1;1;0;0;1;1}

Det går genom att subtrahera 1 från matrisen och sedan returnera absolutvärdet av talet med ABS-funktionen. Då blir 1 -> 0 och 0 -> 1.

Invertera: 
FILTER( matris ; ABS(( inkludera ) -1 ))


OCH/ELLER med FILTER

För att filtrera med OCH/ELLER använder vi oss av liknande logik som i föregående exempel. Eftersom Excels egna funktioner för OCH/ELLER inte fungerar på matriser, måste vi i stället använda oss av matematiska operationer.

För OCH används multiplikation, för ELLER används addition.

OCH:
FILTER( matris ; (inkludera) * (inkludera))

ELLER:
Syntax: FILTER( matris ; (inkludera) + (inkludera))

Om vi exempelvis vill filtrera alla rader mellan datumen 10/02/2022 och 02/02/2022, skriver vi två olika uttryck och multiplicerar dem. Det vill säga, inkludera alla rader där datumet är större än 10/02/2022 och mindre än 02/02/2022.

Men varför använder vi multiplikation och addition? Om vi har två olika jämförelser med olika resultat och multiplicerar dem, ser vi i tabellen nedan att svaret endast blir SANT om båda jämförelserna är sanna – i alla övriga fall blir resultatet FALSKT.

0 * 0 = 0
0 * 1 = 0
1 * 0 = 0
1 * 1 = 1

Samma logik gäller för addition:

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 2 (även 2 tolkas som SANT i Excel)

Hur man når värden i en filtrerad tabell

FILTER-funktionen returnerar en dynamisk matris som svar vilket kan leda till problem ifall om vill bearbeta talen vidare. Detta är ofta fallet eftersom funktionen används mycket till att evaluera vilka värden/rader som ska inkluderas till exempel i en uträkning. Ett sätt är att endast filtrera kolumnen vi behöver i stället för att returnera flera kolumner eller en hel tabell.

Om vi i vårt exempel med datum skulle vilja göra en LETARAD-funktion på produkterna eller summera prisen – behöver vi nå dem dynamiskt. Detta kan göras på flera sätt, men det lättaste sättet är förmodligen att baka in funktionen i en INDEX-funktion.

Returnera kolumn från filtrerad tabell:
INDEX(FILTER( matris ; inkludera) ; 0 ; nr.kolumn))

 

Vi kan således summera alla värden i kolumnen Pris där ordrar är gjorda mellan våra valda datum med följande formel:

En nackdel med FILTER-funktionen är dock att den är relativt långsam och resurskrävande när man jobbar med stora mängder data. Därför rekommenderar jag att alltid använda Excels inbyggda funktioner för t. ex. villkorliga beräkningar eller matchningar, även om det oftast går att bygga upp en identisk funktion med FILTER.

Nästa vecka bekantar vi oss med LET-funktionen i Excel!

Fler blogginlägg

Trött på att Googla?
Få de bästa Excel-tipsen varje vecka. Gör som 30 000 andra och prenumerera på vårt nyhetsbrev.

Om skribenten