Я пытаюсь написать формулу, используя LET, FILTER, COUNTIF и динамические диапазоны для подсчета появления уникальных значений в столбце таблицы.
У меня есть таблица Excel tbl с одним столбцом df_col вот так:
Я написал следующую функцию Excel, которая выводит уникальные значения вместе со счетчиком в таблице.
=LET(
col_all; tbl[df_col];
col_uniq; UNIQUE(col_all);
col_count; COUNTIF(col_all; col_uniq);
HSTACK(col_uniq; col_count)
)
Результат, который я получаю, соответствует моим ожиданиям
Затем я хотел добавить FILTER в столбец, чтобы сделать это для подмножества данных.
=LET(
col_filtered; FILTER(tbl[df_col]; tbl[df_col]< = "b");
col_uniq; UNIQUE(col_filtered);
col_count; COUNTIF(col_filtered; col_uniq);
HSTACK(col_uniq; col_count);
)
Результат выдает ошибки. Кажется, функция COUNTIF не работает с полученным списком.
Выполнение оценки формулы показывает ошибку в части COUNTIF. Тем не менее, выполнение этих шагов в Excel без функции LET работает нормально.
В чем проблема?
Предлагаю поискать функцию GROUPBY(). Он делает все, что вы хотите в этом запросе.


COUNTIF функция требует диапазона ячеек.
В вашем первом примере ссылка на таблицу преобразуется в диапазон ячеек.
Во втором и в комментариях передаваемые параметры являются массивами, что не принимается функцией. Это приводит к ошибке #VALUE.
Информация: Microsoft
спасибо, это объясняет, почему он не работает. Есть ли какая-либо альтернативная функция, которая могла бы напрямую подсчитывать вхождения в массиве?
Я нашел обходное решение ограничения ссылок COUNTIF, которое подходит для моего случая.
=LET(
col_all; FILTER(tbl[df_col]; tbl[df_col]< = "b");
col_uniq; UNIQUE(col_all);
col_count; BYROW(col_uniq; LAMBDA(x; SUM(--(col_all=x))));
res;HSTACK(col_uniq; col_count);
res
)
Проблему можно упростить до того, почему этот код не работает. =LET(данные; {"a";"a";"b";"c";"c";"c"}; data_unique; UNIQUE(данные); COUNTIF(данные; data_unique) )