Формула на Excel: БРОЙКИ с променлив обхват -

Обобщение

За да конфигурирате COUNTIFS (или COUNTIF) с променлив диапазон, можете да използвате функцията OFFSET. В показания пример формулата в B11 е:

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

Тази формула брои непразни клетки в диапазон, който започва от B5 и завършва 2 реда над клетката, където живее формулата. Същата формула се копира и поставя 2 реда под последния запис в данните, както е показано.

Обяснение

В показания пример формулата в B11 е:

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

Работейки отвътре навън, работата по настройването на променлив обхват се извършва от функцията OFFSET тук:

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

OFFSET има пет аргумента и е конфигуриран по следния начин:

  • справка = B $ 5, започнете от клетка B5, ред заключен
  • редове = 0, отмества нула редове от началната клетка
  • cols = 0, компенсира нула колони начална клетка
  • височина = ROW () - ROW (B $ 5) -1 = 5 реда висока
  • ширина = 1 колона широка

За да определим височината на диапазона в редове, използваме функцията ROW по следния начин:

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

Тъй като ROW () връща номера на реда на "текущата" клетка (т.е. клетката, в която живее формулата), можем да опростим по следния начин:

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

С горната конфигурация OFFSET връща диапазона B5: B9 директно на COUNTIFS:

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

Забележете, че препратката към B $ 5 в горната формула е смесена препратка, с относителна колона и заключен ред. Това позволява формулата да бъде копирана в друга колона и пак да работи. Например, след като се копира в C12, формулата е:

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

Забележка: OFFSET е нестабилна функция и може да причини проблеми с производителността в големи или сложни работни листове.

С НЕПРЯКИ и АДРЕС

Друг подход е да се използва формула, базирана на функциите INDIRECT и ADDRESS. В този случай събираме диапазон като текст, след което използваме INDIRECT, за да оценим текста като препратка. Формулата в B11 ще бъде:

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

Функцията ADDRESS се използва за изграждане на диапазон като този:

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

В първия случай на АДРЕС предоставяме номер на реда като твърдо кодирана стойност 5 и предоставяме номера на колоната с функцията COLUMN:

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

Във втория случай предоставяме "текущия" номер на реда минус 2 и текущата колона с функцията COLUMN:

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

След като обединим тези две стойности заедно, имаме:

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

Обърнете внимание, че това е текстов низ. За да конвертираме в валидна референция, трябва да използваме INDIRECT:

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

И накрая, формулата в B11 става:

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

Забележка: INDIRECT е променлива функция и може да причини проблеми с производителността в големи или сложни работни листове.

Интересни статии...