Excel-formel: Telle bare synlige rader med kriterier

Generisk formel

=SUMPRODUCT((range=criteria)*(SUBTOTAL(103,OFFSET(range,rows,0,1))))

Sammendrag

For å telle synlige rader bare med kriterier, kan du bruke en ganske kompleks formel basert på SUMPRODUCT, SUBTOTAL og OFFSET. I eksemplet vist er formelen i C12:

=SUMPRODUCT((C5:C8=C10)*(SUBTOTAL(103,OFFSET(C5,ROW(C5:C8)-MIN(ROW(C5:C8)),0))))

Forord

SUBTOTAL-funksjonen kan enkelt generere summer og teller for skjulte og ikke-skjulte rader. Det er imidlertid ikke i stand til å håndtere kriterier som COUNTIF eller SUMIF uten hjelp. En løsning er å bruke SUMPRODUCT til å bruke både SUBTOTAL-funksjonen (via OFFSET) og kriteriene. Detaljene i denne tilnærmingen er beskrevet nedenfor.

Forklaring

I kjernen fungerer denne formelen ved å sette opp to matriser inne i SUMPRODUCT. Den første matrisen bruker kriterier, og den andre matrisen håndterer synlighet:

=SUMPRODUCT(criteria*visibility)

Kriteriene brukes med en del av formelen:

=(C5:C8=C10)

Som genererer en matrise som dette:

(FALSE;TRUE;FALSE;TRUE)

Hvor SANT betyr "oppfyller kriterier". Merk fordi vi bruker multiplikasjon (*) på denne matrisen, vil de SANTE FALSKE verdiene automatisk konverteres til 1 og 0 ved matematikkoperasjonen, så vi ender med:

(0;1;0;1)

Synlighetsfilteret brukes med SUBTOTAL, med funksjonsnummer 103.

SUBTOTAL er i stand til å ekskludere skjulte rader når du kjører beregninger, så vi kan bruke det i dette tilfellet til å generere et "filter" for å ekskludere skjulte rader inne i SUMPRODUCT. Problemet er imidlertid at SUBTOTAL returnerer et enkelt tall, mens vi trenger en rekke resultater for å bruke det med suksess i SUMPRODUCT. Trikset er å bruke OFFSET for å mate SUBTOTAL en referanse per rad, slik at OFFSET vil returnere ett resultat per rad.

Selvfølgelig krever det et annet triks, som er å gi OFFSET en matrise som inneholder ett tall per rad, og starter med null. Vi gjør det med et uttrykk bygget på ROW-funksjonen:

=ROW(C5:C8)-MIN(ROW(C5:C8)

som vil generere en matrise som dette:

(0;1;2;3)

Oppsummert genereres den andre matrisen (som håndterer synlighet ved hjelp av SUBTOTAL) slik:

=SUBTOTAL(103,OFFSET(C5,ROW(C5:C8)-MIN(ROW(C5:C8)),0)) =SUBTOTAL(103,OFFSET(C5,(0;1;2;3),0)) =SUBTOTAL(103,("East";"West";"Midwest";"West")) =(1;0;1;1)

Og til slutt har vi:

=SUMPRODUCT((0,1,0,1)*(1;0;1;1))

Som returnerer 1.

Flere kriterier

Du kan utvide formelen for å håndtere flere kriterier som dette:

=SUMPRODUCT((rng1=criteria1)*(rng2=criteria2)*(SUBTOTAL(103,OFFSET(rng,rows,0,1))))

Summing resultater

For å returnere en sum av verdier i stedet for en telling, kan du tilpasse formelen slik at den inkluderer et sumområde:

=SUMPRODUCT(criteria*visibility*sumrange)

Kriteriene og synlighetsarrayene fungerer på samme måte som forklart ovenfor, unntatt celler som ikke er synlige. Hvis du trenger delvis samsvar, kan du konstruere et uttrykk ved hjelp av ISNUMBER + SEARCH, som forklart her.

Gode ​​lenker

MrExcel-diskusjon, med Mike Girvin og Aladin Akyurek Mike Girvins Magic Trick 1010

Interessante artikler...