Excel-formel: FILTER på topp n-värden med kriterier -

Generisk formel

=FILTER(data,(range>=LARGE(IF(criteria),n))*(criteria))

Sammanfattning

För att filtrera data för att visa de bästa n-värdena som uppfyller specifika kriterier kan du använda FILTER-funktionen tillsammans med LARGE och IF-funktionerna. I exemplet som visas är formeln i F5:

=FILTER(data,(score>=LARGE(IF(group="b",score),3))*(group="b"))

där data (B5: D16), grupp (C5: C16) och poäng (D5: D16) heter intervall.

Förklaring

Denna formel använder FILTER-funktionen för att hämta data baserat på ett logiskt test konstruerat med LARGE- och IF-funktionerna. Resultatet är de tre bästa poängen i grupp B.

FILTER-funktionen tillämpar kriterier med argumentet include. I detta exempel är kriterier konstruerade med boolesk logik så här:

(score>=LARGE(IF(group="b",score),3))*(group="b")

Vänster sida av uttrycket riktar sig mot poäng som är större än eller lika med den 3: e högsta poängen i grupp B:

score>=LARGE(IF(group="b",score),3)

IF-funktionen används för att se till att LARGE bara arbetar med grupp B-poäng. Eftersom vi har totalt 12 poäng returnerar IF en matris med 12 resultat så här:

(FALSE;65;FALSE;80;FALSE;88;FALSE;76;FALSE;86;FALSE;83)

Lägg märke till att de enda poängen som överlever operationen är från grupp B. Alla andra poäng är FALSKA. Denna matris returneras direkt till STOR som arrayargumentet:

LARGE((FALSE;65;FALSE;80;FALSE;88;FALSE;76;FALSE;86;FALSE;83),3)

LARGE ignorerar FALSE-värdena och returnerar den 3: e högsta poängen, 83.

Vi kan nu förenkla formeln till:

=FILTER(data,(score>=83)*(group="b"))

som löser sig att:

=FILTER(data,(0;0;0;0;0;1;0;0;0;1;0;1))

Slutligen returnerar FILTER skivor för Mason, Annie och Cassidy, som rinner ut i intervallet F5: H7.

Sortera resultat efter poäng

FILTER returnerar som standard matchande poster i samma ordning som de visas i källdata. För att sortera resultat i fallande ordning efter poäng kan du bygga in den ursprungliga FILTER-formeln i SORT-funktionen så här:

=SORT(FILTER(data,(score>=LARGE(IF(group="b",score),3))*(group="b")),3,-1)

Här returnerar FILTER resultat direkt till SORT-funktionen som arrayargument. Sorteringsindex är inställt på 3 (poäng) och sorteringsordning är satt till -1 för fallande ordning.

Intressanta artiklar...