Проста зведена таблиця для підрахунку унікальних значень


134

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

Наприклад, у мене це:

ABC   123
ABC   123
ABC   123
DEF   456
DEF   567
DEF   456
DEF   456

Що я хочу - це зведена таблиця, яка показує мені це:

ABC   1
DEF   2

Проста таблиця зведення, яку я створюю, дає мені це (підрахунок, скільки рядків):

ABC   3
DEF   4  

Але я хочу замість цього кількість унікальних значень.

Що я насправді намагаюся зробити, це дізнатися, які значення в першому стовпці не мають однакового значення у другому стовпці для всіх рядків. Іншими словами, "ABC" - це "добре", "DEF" - "погано"

Я впевнений, що існує простіший спосіб зробити це, але я подумав, що я спробую спробувати згорнутий стіл ...


8
Зауважте, що для останніх версій excel ця відповідь є найбільш зручною.
Денніс Джахеруддін

Відповіді:


108

Вставте 3-й стовпчик і C2вставте цю формулу в Cell

=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1)

і скопіюйте його. Тепер створіть своє зведення на основі 1-го та 3-го стовпців. Дивіться знімок

введіть тут опис зображення


+1 Я думаю, що це трохи простіше, ніж моє рішення, оскільки для першого ряду не потрібно спеціального значення
lc.

2
Гарна техніка. Я не знав про це. Можна зробити те ж саме з функцією масиву =IF(SUM((A$2:A2=A2)*(B$2:B2=B2)) > 1, 0, 1)(натискаючи Ctrl-Shift-Enter при введенні формули, щоб вона набула {}навколо неї).
ЕрікЕ

Універсальна відповідь, не вимагає жодної конкретної функції. Просто хороші прості формули.
Альберто Де Каро

Будь-яка ідея, як поширити це на ситуацію з трьома колонками?
tumultous_rooster

13
Зауважте, що ця відповідь НЕ дасть правильного рішення, якщо ви фільтруєте деякі рядки за допомогою параметрів зведеної таблиці. Скажімо, перший ряд відфільтрований. Тоді сума ABC виявиться дорівнює 0!
jarlemag

250

ОНОВЛЕННЯ: Ви можете зробити це автоматично автоматично за допомогою Excel 2013. Я створив це як нову відповідь, оскільки моя попередня відповідь насправді вирішує дещо іншу проблему.

Якщо у вас є ця версія, виберіть свої дані для створення зведеної таблиці, а коли ви створюєте свою таблицю, переконайтесь, що прапорець "Додати ці дані до моделі даних" встановлений прапорець (див. Нижче).

Поставте прапорець біля пункту "Додати ці дані до моделі даних"

Потім, коли відкриється ваша зведена таблиця, створіть свої рядки, стовпці та значення зазвичай. Потім натисніть поле, яке ви хочете обчислити різну кількість, і відредагуйте параметри значення поля: Редагувати параметри значення поля

Нарешті, прокрутіть униз до останнього варіанту та виберіть "Відмітний рахунок". Оберіть опцію "Відмінна кількість"

Це має оновити значення зведеної таблиці, щоб відобразити дані, які ви шукаєте.


5
@MichaelK набагато краще, якщо у вас є Excel 2013
jrharshath

3
Чи можна це зробити і для існуючих зведених таблиць, тому нам не потрібно відтворювати 200+ таблиць, щоб отримати доступ до чіткої функції функцій підрахунку?
Луїза

12
Просто FYI: якщо ви ще не зберегли свій файл як файл Excel (.xlsx) (наприклад: ви відкрили .csv файл), опція "Додати ці дані до моделі даних" вимкнена / затьмарена . Просте рішення - зберегти файл як файл Excel.
PonyEars

9
Це не підтримується на Mac? Ця опція не з’являється для мене. Я на версії 15.27.
jkupczak

4
Ця опція дійсно не існує на Mac, оскільки Моделі даних взагалі є функцією лише для Windows.
Томті

10

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

ABC   123  
ABC   123  
ABC   123   
DEF   456  
DEF   567  
DEF   456  
DEF   456

і хочете, щоб він відображався як:

ABC   1  
DEF   2

Але щось подібне:

ABC   123  
ABC   123  
ABC   123  
ABC   456  
DEF   123  
DEF   456  
DEF   567  
DEF   456  
DEF   456

і хотів, щоб це виглядало як:

ABC  
   123    3  
   456    1  
DEF  
   123    1  
   456    3  
   567    1

Я знайшов найкращий спосіб перенести свої дані у цей формат, а потім мати можливість маніпулювати ними далі - використовувати наступне:

введіть тут опис зображення

Після вибору "Запуск усього в" потім виберіть заголовок для вторинного набору даних (у цьому випадку це буде заголовок або стовпець набору даних, що включає 123, 456 та 567). Це дасть вам максимальне значення із загальною кількістю елементів у цьому наборі у вашому первинному наборі даних.

Потім я скопіював ці дані, вставив їх як значення, а потім помістив їх в іншу зведену таблицю, щоб легше маніпулювати ними.

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


У мене була зовсім інша проблема, але ця відповідь просто вказала на мене в правильному напрямку. Дякую.
jtolle

ця відповідь відповідає моїй потребі, оскільки у мене є 500 000 рядків, які мені потрібно застосувати формулу, і на моєму комп’ютері не вистачає пам'яті, якщо я намагаюся. спасибі!
колядок

6

Я знайшов, що найпростішим підходом є використання Distinct Countпараметра під Value Field Settings( лівою кнопкою миші клацніть поле на Valuesпанелі). Параметр для Distinct Countзнаходиться в самому дні списку.

Місце де натиснути

Ось перед (TOP; нормально Count) і після (BOTTOM; Distinct Count)

РАХУВАТИ

ВИДАЛЕНО КУХНЯ


3
Станом на Office 2016: Щоб мати можливість використовувати цю функцію, слід створити зведену таблицю з відміткою "Додати ці дані до моделі даних".
Лев


3

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

припустимо, що діапазон таблиці для даних, представлених у запитанні, є A1: B7, введіть таку формулу в комітку C1:

=IF(COUNTIF($B$1:$B1,B1)>1,0,COUNTIF($B$1:$B1,B1))

Скопіюйте цю формулу у всі рядки і останній рядок буде містити:

=IF(COUNTIF($B$1:$B7,B7)>1,0,COUNTIF($B$1:$B7,B7))

Це призводить до того, що 1 повертається при першому виявленні запису, а 0 - за весь час.

Просто підсумовуйте стовпець у вашій зведеній таблиці


2
Якщо у вас є великий набір даних, використовуйте =IF(COUNTIF($B$1:$B1,B1),1,0)- таким чином, лічильник працює лише один раз!
Пітер Альберт

2

Мій підхід до цієї проблеми був трохи іншим, ніж те, що я бачу тут, тому поділюсь.

  1. (Спочатку зробіть копію своїх даних)
  2. Об’єднайте стовпчики
  3. Видаліть дублікати у з’єднаному стовпчику
  4. Останнє - поворот на отриманому наборі

Примітка. Я хотів би включити зображення, щоб зробити це ще простіше зрозуміти, але не можу, тому що це моє перше повідомлення;)


1

Відповідь Сіддхарта надзвичайна.

Однак ця методика може спричинити неприємності при роботі з великим набором даних (мій комп'ютер застиг на 50 000 рядків). Деякі менш трудомісткі методи:

Перевірка єдиності

  1. Сортувати за двома стовпцями (A, B у цьому прикладі)
  2. Використовуйте формулу, яка враховує менше даних

    =IF(SUMPRODUCT(($A2:$A3=A2)*($B2:$B3=B2))>1,0,1) 
    

Кілька перевірок унікальності

Якщо вам потрібно перевірити унікальність у різних стовпцях, ви не можете розраховувати на два види.

Натомість

  1. Сортування одного стовпця (A)
  2. Додайте формулу, що охоплює максимальну кількість записів для кожної групи. Якщо ABC може мати 50 рядків, формула буде

    =IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1)
    

2
Інший, можливо, менш інтенсивний процесор спосіб - це додавання стовпця С і в С2 =A2&B2. Потім додайте стовпчик D і в D2 поставте =IF(MATCH(C2, C$2:C2, 0) = ROW(C1), 1, 0). Залийте обидва. Хоча це все ще шукає з початку всього діапазону, він зупиняється, коли знаходить перший, і замість того, щоб множувати значення з 50 000 рядків разом, він просто повинен знайти значення - так воно повинно бути набагато краще.
ЕрікЕ

@ErikE Sharp - Я також думаю, що ваша техніка зупиняється на першій знахідці. Але якщо у вас є багато унікальних значень у C (наприклад: лише 50 ABC), ви продовжуватимете перевірку величезних обсягів даних. Класна особливість: ваша формула найкраще працює, коли дані несортовані.
workglide

1

Excel 2013 може розраховувати різну кількість поворотів. Якщо немає доступу до 2013 року, а це менший обсяг даних, я роблю дві копії необроблених даних, а в копії b вибираю обидва стовпчики та видаляю дублікати. Потім зробіть поворот і порахуйте свій стовпчик b.


1

Ви можете використовувати COUNTIFS для кількох критеріїв,

= 1 / COUNTIFS (A: A, A2, B: B, B2), а потім перетягніть вниз. Ви можете розмістити стільки критеріїв, скільки вам потрібно, але це, як правило, займає багато часу для обробки.


1

Крок 1. Додайте стовпчик

Крок 2. Використовуйте формулу = IF(COUNTIF(C2:$C$2410,C2)>1,0,1)у 1-му записі

Крок 3. Перетягніть його до всіх записів

Крок 4. Фільтр "1" у стовпці з формулою


0

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

Що я маю на увазі, клітина C1завжди повинна бути 1. Клітина C2повинна містити формулу =IF(COUNTIF($A$1:$A1,$A2)*COUNTIF($B$1:$B1,$B2)>0,0,1). Скопіюйте цю формулу вниз, щоб комірка C3містила =IF(COUNTIF($A$1:$A2,$A3)*COUNTIF($B$1:$B2,$B3)>0,0,1)тощо.

Якщо у вас є клітинка заголовка, ви хочете перемістити всі ці рядки вниз і ваша C3формула повинна бути =IF(COUNTIF($A$2:$A2,$A3)*COUNTIF($B$2:$B2,$B3)>0,0,1).


0

Якщо у вас є дані відсортовані .. Я пропоную використовувати наступну формулу

=IF(OR(A2<>A3,B2<>B3),1,0)

Це швидше, оскільки для обчислення використовується менше комірок.


0

Я, як правило, сортую дані за полями, які мені потрібні, щоб зробити окремий підрахунок, а потім використовувати IF (A2 = A1,0,1); то ви отримуєте 1 у верхньому рядку кожної групи ідентифікаторів. Простий і не потребує часу для обчислення на великих наборах даних.


0

Ви також можете використовувати для помічника стовпчик VLOOKUP. Я тестував і виглядає трохи швидше, ніж COUNTIF.

Якщо ви використовуєте заголовок і дані починаються в комірці A2, то в будь-якій комірці підряд використовуйте цю формулу і скопіюйте всі інші комірки в той самий стовпець:

=IFERROR(IF(VLOOKUP(A2;$A$1:A1;1;0)=A2;0;1);1)

-3

Я знайшов простіший спосіб зробити це. Посилаючись на приклад Сиддарта Рута, якщо я хочу порахувати унікальні значення у стовпці А:

  • додайте новий стовпець C і заповніть C2 формулою "= 1 / COUNTIF ($ A: $ A, A2)"
  • перетягніть формулу до іншої частини стовпця
  • поворот зі стовпцем A як мітка рядка та підсумком {стовпець C) у значеннях, щоб отримати кількість унікальних значень у стовпці A

За логікою, це не може працювати для ОП, оскільки воно не дивиться на стовпчик B. Як ви пристосуєте це до роботи з кількома колонками?
ЕрікЕ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.