
Generieke formule
=FILTER(data,(header="a")+(header="b"))
Samenvatting
Om kolommen te filteren, geeft u een horizontale matrix op voor het include-argument. In het getoonde voorbeeld is de formule in I5:
=FILTER(B5:G12,(B4:G4="a")+(B4:G4="c")+(B4:G4="e"))
Het resultaat is een gefilterde set gegevens die alleen de kolommen A, C en E uit de brongegevens bevat.
Uitleg
Hoewel FILTER vaker wordt gebruikt om rijen te filteren, kunt u ook kolommen filteren, het is de kunst om een array te voorzien van hetzelfde aantal kolommen als de brongegevens. In dit voorbeeld construeren we de array die we nodig hebben met booleaanse logica, ook wel Booleaanse algebra genoemd.
In Booleaanse algebra komt vermenigvuldiging overeen met EN-logica en komt optellen overeen met OF-logica. In het getoonde voorbeeld gebruiken we Booleaanse algebra met OR-logica (optellen) om alleen de kolommen A, C en E als volgt te targeten:
(B4:G4="a")+(B4:G4="c")+(B4:G4="e")
Nadat elke uitdrukking is geëvalueerd, hebben we drie arrays van WAAR / ONWAAR waarden:
(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE)+ (FALSE,FALSE,TRUE,FALSE,FALSE,FALSE)+ (FALSE,FALSE,FALSE,FALSE,TRUE,FALSE)
De wiskundige bewerking (optellen) converteert de WAAR en ONWAAR waarden naar 1s en 0s, dus je kunt de bewerking als volgt zien:
(1,0,0,0,0,0)+ (0,0,1,0,0,0)+ (0,0,0,0,1,0)
Uiteindelijk hebben we een enkele horizontale array van enen en nullen:
(1,0,1,0,1,0)
die rechtstreeks aan de FILTER-functie wordt geleverd als het include-argument:
=FILTER(B5:G12,(1,0,1,0,1,0))
Merk op dat er 6 kolommen zijn in de brongegevens en 6 waarden in de array, allemaal 1 of 0. FILTER gebruikt deze array als een filter om alleen kolommen 1, 3 en 5 uit de brongegevens op te nemen. Kolommen 2, 4 en 6 worden verwijderd. Met andere woorden, de enige kolommen die overleven, worden geassocieerd met 1s.
Met de MATCH-functie
Het toepassen van OR-logica met toevoeging zoals hierboven weergegeven, werkt prima, maar het schaalt niet goed en maakt het onmogelijk om een reeks waarden uit een werkblad als criterium te gebruiken. Als alternatief kunt u de MATCH-functie samen met de ISNUMBER-functie op deze manier gebruiken om het include-argument efficiënter te construeren:
=FILTER(B5:G12,ISNUMBER(MATCH(B4:G4,("a","c","e"),0)))
De MATCH-functie is geconfigureerd om te zoeken naar alle kolomkoppen in de matrixconstante ("a", "c", "e") zoals weergegeven. We doen het op deze manier zodat het resultaat van MATCH dimensies heeft die compatibel zijn met de brongegevens, die 6 kolommen bevatten. Merk ook op dat het derde argument in MATCH is ingesteld op nul om een exacte overeenkomst te forceren.
Nadat MATCH is uitgevoerd, retourneert het een array als deze:
(1,#N/A,2,#N/A,3,#N/A)
Deze array gaat rechtstreeks naar ISNUMBER, wat een andere array retourneert:
(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)
Net als hierboven is deze array horizontaal en bevat 6 waarden gescheiden door komma's. FILTER gebruikt de array om kolommen 2, 4 en 6 te verwijderen.
Met een assortiment
Omdat de kolomkoppen al op het werkblad staan in het bereik I4: K4, kan de bovenstaande formule eenvoudig worden aangepast om het bereik als volgt direct te gebruiken:
=FILTER(B5:G12,ISNUMBER(MATCH(B4:G4,I4:K4,0)))
Het bereik I4: K4 wordt geëvalueerd als ("a", "c", "e") en gedraagt zich net als de matrixconstante in de bovenstaande formule.