Excel formel: Tæl unikke tekstværdier med kriterier

Indholdsfortegnelse

Generisk formel

(=SUM(--(FREQUENCY(IF(criteria,MATCH(vals,vals,0)),ROW(vals)-ROW(vals.first)+1)>0)))

Resumé

For at tælle unikke tekstværdier i et interval med kriterier kan du bruge en matrixformel baseret på FREKVENS- og MATCH-funktionerne. I det viste eksempel er formlen i G6:

(=SUM(--(FREQUENCY(IF(C5:C11=G5,MATCH(B5:B11,B5:B11,0)),ROW(B5:B11)-ROW(B5)+1)>0)))

der returnerer 3, da tre forskellige mennesker arbejdede på projektet Omega.

Bemærk: dette er en matrixformel og skal indtastes med kontrol + skift + enter.

Forklaring

Dette er en kompleks formel, der bruger FREKVENS til at tælle numeriske værdier, der er afledt med MATCH-funktionen. Når man arbejder indefra og ud, bruges MATCH-funktionen til at få positionen for hver værdi, der vises i dataene:

MATCH(B5:B11,B5:B11,0)

Resultatet fra MATCH er en matrix som denne:

(1;1;3;1;1;6;7)

Da MATCH altid returnerer positionen for det første match, returnerer værdier, der vises mere end en gang i dataene, den samme position. For eksempel, fordi "Jim" vises 4 gange på listen, vises han i denne matrix 4 gange som nummer 1.

Uden for MATCH-funktionen bruges IF-funktionen til at anvende kriterier, som i dette tilfælde involverer testning af, om projektet er "omega" (fra celle G5):

IF(C5:C11=G5 // filter on "omega"

IF-funktionen fungerer som et filter, der kun tillader værdierne fra MATCH at passere, hvis de er forbundet med "omega". Resultatet er en matrix som denne:

(FALSE;FALSE;FALSE;1;1;6;7) // after filtering

Det filtrerede array leveres direkte til FREQUENCY-funktionen som data_array- argumentet. Dernæst bruges ROW-funktionen til at oprette en sekventiel liste med tal for hver værdi i dataene:

ROW(B3:B12)-ROW(B3)+1

Dette skaber en matrix som denne:

(1;2;3;4;5;6;7;8;9;10)

som bliver bins_array- argumentet i FILTER. På dette tidspunkt har vi:

FREQUENCY((FALSE;FALSE;FALSE;1;1;6;7),(1;2;3;4;5;6;7))

FREQUENCY returnerer en matrix med tal, der angiver et antal for hver værdi i dataarrayet, organiseret efter bin. Når et tal allerede er talt, returnerer FREQUENCY nul. Resultatet fra FREQUENCY er en matrix som denne:

(2;0;0;0;0;1;1;0) // result from FREQUENCY

Bemærk: FREKVENS returnerer altid en matrix med et element mere end bins_array .

På dette tidspunkt kan vi omskrive formlen sådan:

=SUM(--((2;0;0;0;0;1;1;0)>0))

Vi kontrollerer for værdier større end nul, som konverterer tallene til SAND eller FALSK:

=SUM(--((TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE)))

Derefter bruger vi en dobbelt-negativ til at tvinge de logiske værdier til 1s og 0s:

=SUM((1;0;0;0;0;1;1;0))

Endelig returnerer SUM-funktionen 3 som det endelige resultat.

Bemærk: dette er en matrixformel og skal indtastes ved hjælp af Control + Shift + Enter.

Håndtering af tomme celler i området

Hvis nogen celler i området er tomme, skal du justere formlen for at forhindre, at tomme celler overføres til MATCH-funktionen, hvilket vil give en fejl. Du kan gøre dette ved at tilføje en anden indlejret IF-funktion for at kontrollere, om der er tomme celler:

(=SUM(--(FREQUENCY(IF(B5:B11"",IF(C5:C11=G5,MATCH(B5:B11,B5:B11,0))),ROW(B5:B11)-ROW(B5)+1)>0)))

Med to kriterier

Hvis du har to kriterier, kan du udvide formelens logik ved at tilføje en anden indlejret IF:

(=SUM(--(FREQUENCY(IF(c1,IF(c2,MATCH(vals,vals,0))),ROW(vals)-ROW(vals.1st)+1)>0)))

Hvor c1 = kriterier1, c2 = kriterier2 og vals = værdierne.

Med boolsk logik

Med boolsk logik kan du reducere indlejrede IF'er:

(=SUM(--(FREQUENCY(IF((criteria1)*(criteria2),MATCH(vals,vals,0)),ROW(vals)-ROW(vals.1st)+1)>0)))

Dette gør det lettere at tilføje og administrere yderligere kriterier.

Gode ​​links

Mike Girvins bog Control-Shift-Enter

Interessante artikler...