Підраховуйте унікальні значення у стовпці, одночасно фільтруючи інші стовпці


3

У мене є рахунок-фактура, яку я хочу фільтрувати на кількох стовпцях, а потім розраховувати кількість унікальних значень у стовпці Номер частини. Цей рахунок має бути оновлений, коли я змінюю критерії фільтрації в інших стовпцях. Як це зробити? Дякую!


Чи надає ваш фільтр унікальні результати, або потрібно додатково зменшити результати до кількості унікальних елементів?
datatoo

Я думаю, що деякі розробки з цього питання дуже допоможуть у вирішенні цієї проблеми.
Jerry

1
Ви можете використовувати зведену таблицю, щоб зробити це, якщо ваші фільтри досить прості.
Excellll

Відповіді:


5

Від MrExcel.com :

=SUM(IF(FREQUENCY(IF(SUBTOTAL(3,OFFSET(A2,ROW(A2:A10)-ROW(A2),,1)),
    IF(A2:A10<>"",MATCH("~"&A2:A10,A2:A10&"",0))),ROW(A2:A10)-ROW(A2)+1),1)) 

Формула припускає, що діапазон даних становить A2: A10. Вам потрібно налаштувати посилання на комірку A2 і діапазон A2: A10, щоб відповідати вашим даним.

Це формула масиву і вводиться з Контроль - Shift - Enter комбінації клавіш.

Розглядаючи вираз, можна побачити, що це залежить від використання масивів у поєднанні з чотирма функціями Excel. Вони пояснюються нижче. Для цілей ілюстрації обговорення буде зосереджено на наступному прикладі з загальною кількістю 9 значень у клітинах A2: A10, причому тільки 5 буде видно після фільтрування.

enter image description here

1.  MATCH("~" & A2:A10, A2:A10 & "", 0)

The MATCH Функція, як правило, використовується для пошуку значення в іншому діапазоні значень і, якщо знайдено значення, для повернення позиції рядка, де знайдено відповідне значення.

Коли масив використовується як як значення пошуку, так і діапазон пошуку, MATCH повертає масив, який показує позицію рядка першого відповідного значення, якщо воно є, для кожного значення в діапазоні.

Якщо діапазон включає дублюючі значення, для кожного повторюваного значення повертається однакова позиція рядка. Використовуючи дані прикладу, MATCH функція буде виробляти:

MATCH(A2:A10, A2:A10, 0)}

-->MATCH({11, 98, 67,  , 37, 67, 98, 56, 67},{11, 98, 67, ,37, 67, 98, 56, 67},0)

-->      { 1,  2 , 3, 4,  5,  3,  2,  8,  3} 

З невеликою кількістю робіт цей результат можна використовувати для отримання кількості випадків, коли кожне значення виникає у вихідному масиві. три входження цього значення у вхідному масиві. *

2.  SUBTOTAL(3, OFFSET(A2, ROW(A2:A10)-ROW(2),,1)

Особливу складність цього питання полягає в тому, як розрізняти значення, що з'являються у відфільтрованому списку, від тих, які не мають. The SUBTOTAL Функція, застосована до діапазону, включає тільки видимі рядки у її результатах, але не дає, навіть якщо вона введена як формула масиву, інформацію про те, чи є окремі клітинки у вхідному діапазоні видимими чи ні.

Проте OFFSET Функція, як тут використовується, повертає масив комірок у такій формі, що SUBTOTAL видає результат масиву. Зараховано Лорана Лонре, ця формула дає масив з 1 для видимих ​​клітин і 0 для прихованих клітин.

SUBTOTAL(3, OFFSET(A2, ROW(A2:A10) - ROW(A2), , 1))

--> SUBTOTAL(3, OFFSET(A2, {2, 3,..., 10} - {2}, , 1))

--> SUBTOTAL(3, OFFSET(A2, {0, 1,..., 8}, , 1))

--> SUBTOTAL(3, ({A2}, {A3},...,{A9}))

--> {0, 1, 1, 0, 0, 0, 1, 1, 1}

З цим результатом стає можливим розраховувати в будь-яких наступних розрахунках тільки значення в діапазоні, які видно після фільтрації. **

3. FREQUENCY(IF(SUBTOTAL(3,OFFSET(...)),IF(A2:A10<>"",MATCH(...))),
             ROW(A2:A10)-ROW(A2)+1)

The FREQUENCY Функція приймає два аргументи, масив значень даних і бен масив, і повертає масив, який показує, скільки значень в діапазоні потрапляли в кожну коробку. Наприклад, якщо значення в діапазоні bin були (1.5, 2.5, 3.5), FREQUENCY буде повертати кількість тих значень даних, які були менше або дорівнювали 1,5, більше 1,5 і менше або дорівнюють 2,5 тощо

У формулі масив даних виражається через комбінацію операторів IF і SUBTOTAL/OFFSET і MATCH вирази. Те, що це насправді, - це елемент за елементом ANDing масивів, створених цими виразами.

SUBTOTAL/OFFSET ARRAY:  {0, 1, 1, 0, 0, 0, 1, 1, 1}  [visible vs. hidden]
MATCH ARRAY:            {1, 2, 3, F, 5, 3, 2, 8, 3}  [row position of 1st match]

RESULT ARRAY:           {F, 2, 3, F, F, F, 2, 8, 3}  [row position of 1st match        
                                                      in visible cells]
'F' = FALSE

Масив bin, створений виразом ROW(A2:A10)-ROW(A2)+1 є просто значеннями від 1 до 9, що відповідають можливим положенням рядків в діапазоні A2: 10.

BIN ARRAY:        {1, 2, 3, 4, 5, 6, 7, 8, 9} 

FREQUENCIES:      {0, 2, 2, 0, 0, 0, 0, 1, 0}

Частоти, які змінюються з 2-кратним значенням 98, відображаються у фільтрованому діапазоні, показані 2 рази 67, і 1-раз 56 показуються.

Оскільки метою є підрахунок кількості окремих значень у відфільтрованому діапазоні, остаточне вкладання IF - IF(FREQUENCY(...), 1) - перетворює ненульові значення в частотний масив в 1:

DISTINCT VALUES ARRAY:  {F, 1, 1, F, F, F, F, 1, 0}

Підсумовування цього масиву, що дає остаточну відповідь 3 для цього прикладу.

* Тильда (~) в MATCH Вираз включено для вилучення символів, таких як '+' і '& gt;' це призвело б до значення помилки, якщо вони були першим символом у відповідних значеннях (тому що Excel розглядав би їх як операторів, а не символів).

** Перший аргумент до SUBTOTAL Функція, значення 3, повідомляє функції повернути кількість видимих ​​клітин. Значення, яке найчастіше бачимо, 9, виробляє суму видимих ​​клітин.


Мені цікаво і хочеться зрозуміти формулу. Чи можете ви розробити його далі?
nixda

1
Див. Мою відредаговану відповідь @nixda.
chuff

1
+1 Добре. Це чудова відповідь, і я багато чому навчився. Це заслуговує більшої уваги
nixda
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.