Excel képlet: COUNTIFS változó tartományban -

Összegzés

A COUNTIFS (vagy COUNTIF) változó tartományú konfigurálásához használhatja az OFFSET funkciót. A bemutatott példában a B11 képlete a következő:

=COUNTIFS(OFFSET(B$5,0,0,ROW()-ROW(B$5)-1,1),"")

Ez a képlet megszámolja a nem üres cellákat egy olyan tartományban, amely B5-től kezdődik és 2 sorral végződik a cella felett, ahol a képlet él. Ugyanezt a képletet másoljuk és beillesztjük 2 sorral az adatok utolsó bejegyzése alá, az ábra szerint.

Magyarázat

A bemutatott példában a B11 képlete a következő:

=COUNTIFS(OFFSET(B$5,0,0,ROW()-ROW(B$5)-1,1),"")

Belülről kifelé haladva a változó tartomány beállításának munkáját az OFFSET funkció végzi itt:

OFFSET(B$5,0,0,ROW()-ROW(B$5)-1,1) // variable range

Az OFFSET öt argumentummal rendelkezik, és a következőképpen van konfigurálva:

  • referencia = B $ 5, a B5 cellánál kezdődik, a sor lezárva
  • sor = 0, nulla sort eltol a kezdő cellától
  • cols = 0, nulla oszlop eltolása indítja a cellát
  • magasság = ROW () - ROW (B $ 5) -1 = 5 sor magas
  • szélesség = 1 oszlop széles

A tartomány magasságának sorokban történő meghatározásához a ROW függvényt használjuk így:

ROW()-ROW(B$5)-1 // work out height

Mivel a ROW () visszaadja az "aktuális" cella sorszámát (vagyis azt a cellát, amelyben a képlet él), így egyszerűsíthetjük:

=ROW()-ROW(B$5)-1 =11-5-1 =5

A fenti konfigurációval az OFFSET visszaadja a B5: B9 tartományt közvetlenül a COUNTIFS-nek:

=COUNTIFS(B5:B9,"") // returns 4

Vegye figyelembe, hogy a fenti képlet B $ 5-re történő hivatkozása vegyes hivatkozás, az oszlop relatív és a sor zárva van. Ez lehetővé teszi a képlet más oszlopba másolását és továbbra is működik. Például a C12-re másolás után a képlet:

=COUNTIFS(OFFSET(C$5,0,0,ROW()-ROW(C$5)-1,1),"")

Megjegyzés: Az OFFSET egy ingatag függvény, amely teljesítményproblémákat okozhat nagy vagy összetett munkalapokon.

KÖZVETLEN és CÍM

Egy másik megközelítés az INDIRECT és a CÍM függvényeken alapuló képlet használata. Ebben az esetben egy tartományt állítunk össze szövegként, majd az INDIRECT segítségével értékeljük a szöveget referenciaként. A B11 képlete a következő lenne:

=COUNTIFS(INDIRECT(ADDRESS(5,COLUMN())&":"&ADDRESS(ROW()-2,COLUMN())),"")

Az ADDRESS függvény egy ilyen tartomány összeállításához használható:

ADDRESS(5,COLUMN())&":"&ADDRESS(ROW()-2,COLUMN())

Az ADDRESS első példányában megadjuk a sorszámot 5-ös keménykódolású értékként, és az oszlopszámot megadjuk a COLUMN funkcióval:

=ADDRESS(5,COLUMN()) // returns "$B$5"

Második esetben az "aktuális" sor számát mínusz 2-vel adjuk meg, az aktuális oszlopot pedig a COLUMN funkcióval:

=ADDRESS(ROW()-2,COLUMN()) // returns "$B$9"

Miután összefogtuk ezt a két értéket, megvan:

"$B$5:$B$9" // as text

Vegye figyelembe, hogy ez egy szöveges karakterlánc. Érvényes referenciává konvertáláshoz a INDIRECT-et kell használnunk:

=INDIRECT("$B$5:$B$9") // returns $B$5:$B$9 as valid range

Végül a B11 képlete a következővé válik:

=COUNTIFS($B$5:$B$9,"") // returns 4

Megjegyzés: A INDIRECT egy ingatag függvény, amely teljesítményproblémákat okozhat nagy vagy összetett munkalapokon.

érdekes cikkek...