Формула INDEX с массивом дает другие результаты, чем INDIRECT с ADDRESS при использовании COUNTA

Формула INDEX с массивом дает другие результаты, чем INDIRECT с ADDRESS при использовании COUNTA
Формула INDEX с массивом дает другие результаты, чем INDIRECT с ADDRESS при использовании COUNTA

Следующий лист иллюстрирует проблему:

Я хочу узнать, есть ли в диапазоне непустые ячейки, но после автогенерации листа я не могу обратиться к этому диапазону напрямую (B3:B5). Он является относительным к некоторому столбцу.

По соображениям производительности я хочу использовать функцию INDEX вместо INDIRECT, но когда я передаю результат INDEX в COUNTA, я получаю 3 незаполненные ячейки, хотя у меня их всего 2.

Почему COUNTA(INDEX($1:$24, {3;4;5}, 2)) дает другой результат, чем COUNTA(INDIRECT(ADDRESS(3, 2) & ":" & ADDRESS(5, 2)))?

Это происходит потому, что INDEX возвращает массив в граф:

и пустая ячейка является 0 в массиве, тогда как Indirect возвращает диапазон:

В массиве 0 считается как 1, но поскольку второй ссылается на диапазон, он видит B4 пустым и не считает его.


Мы все еще можем использовать INDEX и вернуть адрес к графу:

=COUNTA(INDEX($1:$24, 3, 2):INDEX($1:$24, 5, 2))

У этого есть роскошь не быть волатильным и все еще видеть B4 пустым.


NevaDev, 7 февраля 2023 г., 20:29