Формула Excel: СЧЁТЕСЛИМН с переменным диапазоном -

Резюме

Чтобы настроить СЧЁТЕСЛИ (или СЧЁТЕСЛИ) с диапазоном переменных, вы можете использовать функцию СМЕЩЕНИЕ. В показанном примере формула в 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(B$5,0,0,ROW()-ROW(B$5)-1,1) // variable range

OFFSET имеет пять аргументов и настроен следующим образом:

  • ссылка = B $ 5, начало с ячейки B5, строка заблокирована
  • rows = 0, смещение нулевых строк от начальной ячейки
  • cols = 0, смещение нулевых столбцов начальной ячейки
  • height = ROW () - ROW (B $ 5) -1 = 5 рядов в высоту
  • ширина = 1 столбец в ширину

Чтобы определить высоту диапазона в строках, мы используем функцию СТРОКА следующим образом:

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),"")

Примечание. СМЕЩЕНИЕ - это непостоянная функция, которая может вызвать проблемы с производительностью на больших или сложных листах.

С НЕПРЯМЫМ и АДРЕСОМ

Другой подход - использовать формулу, основанную на функциях КОСВЕННЫЙ и АДРЕС. В этом случае мы собираем диапазон как текст, а затем используем INDIRECT для оценки текста как ссылки. Формула в B11 будет такой:

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

Функция АДРЕС используется для создания такого диапазона:

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

В первом экземпляре ADDRESS мы предоставляем номер строки как жестко заданное значение 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

Примечание. КОСВЕННЫЙ - это непостоянная функция, которая может вызвать проблемы с производительностью на больших или сложных листах.

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