Від 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 буде видно після фільтрування.
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, виробляє суму видимих клітин.