2016-05-17 3 views
0

В таблице Excel можно фильтровать данные каждого столбца, щелкнув стрелку рядом с заголовком. При нажатии этой стрелки Excel отображает список уникальных значений, присутствующих в столбце, с рядом с каждым значением. Этот список изменяется, когда фильтры применяются к другим столбцам. Число уникальных значений внутри столбца, если они различаются в зависимости от применяемых фильтров.Число уникальных значений в столбце таблицы excel при активном фильтре

Я хочу динамически вычислять количество уникальных значений в каждом столбце и хранить это в строке над заголовками таблицы. Эти значения должны обновляться, когда в таблицу применяются разные фильтры, так же, как Excel обновляет список, когда один клик на стрелке заголовков.

Где я получил до сих пор:

  • Опция найдено there{=sum(1/countif(Tab[Column1] , Tab[Column1])} (полученных прессованием Ctrl-Shit-Enter) дает число уникальных значений, но это не будет принимать во внимание возможные фильтры на Таблица.

  • В таблице меню tools> design, я могу добавить строку таблицы и использовать функцию subtotal для получения результатов, которые учитывают фильтрацию, но это в основном для простых операций, таких как sum. Я не могу понять, как подсчитать количество уникальных значений таким образом.

  • Что-то вроде структурированной ссылки Tab[[#FilteredData],[Column1]] может сделать трюк.

+0

сколько у вас колонок? возможно ли добавить вспомогательный столбец (с промежуточным итогом) для каждого из них? –

ответ

1

Предполагая, что:

1) Вы используете имена таблиц в формулах

2) Ваша таблица называется "Tab"

3) Первый столбец в таблице называется «Столбец1»

4) пустая клетка в равной степени учитывать уникальное значение

затем поместить эту формулу массива ** в клетке где-то в том же столбце, содержащего этот «column1», предпочтительно таким образом, что она является внешним к самой таблице:

=SUM(IF(FREQUENCY(IF(SUBTOTAL(3,OFFSET(INDEX(Tab,1,COLUMNS($A:A)),ROW(Tab[Column1])-MIN(ROW(Tab[Column1])),)),MATCH(INDEX(Tab,,COLUMNS($A:A)),INDEX(Tab,,COLUMNS($A:A)),0)),ROW(Tab[Column1])-MIN(ROW(Tab[Column1]))+1),1))

Копирование вправо, как обязательный.

С уважением

** Формула массива не вводится таким же образом, как «стандартные» формулы. Вместо нажатия только ENTER, сначала удерживайте CTRL и SHIFT, а затем нажмите ENTER. Если вы сделали это правильно, вы заметите, что Excel помещает фигурные скобки {} вокруг формулы (хотя не пытайтесь вручную вставить их самостоятельно).

+0

Это прекрасно, спасибо. Формула может быть расширена до других столбцов путем перетаскивания мышью. Пустые ячейки (пробелы) не считаются значениями (что для меня действительно здорово, но, похоже, противоречит вашей точке 4). –

+0

Оказывается, решение медленное (становится непригодным) для размера таблиц, с которыми я имею дело (10000 строк, 40 столбцов, некоторые столбцы всегда имеют уникальные значения). Можете ли вы найти способ улучшить скорость (особенно, поскольку я хочу перетащить эту формулу выше большинства столбцов)? –

+0

Я боюсь, что, не считая нескольких мелких хитростей, которые в конечном итоге не будут значительными. Более 400 000 ячеек, таких конструкций, которые должны не только рассматривать только фильтрованные строки, но также идентифицировать уникальные значения в этих отфильтрованных строках, всегда будут преследовать Excel. –

Смежные вопросы