Группировка меток и объединение их текстовых значений (например, сводной таблицы)

22

У меня есть электронная таблица с такими данными:

Продукт | атрибут
---------- + ----------
Продукт А | Cyan
Продукт B | Cyan
Продукт C | Cyan
Продукт А | фуксин
Продукт C | фуксин
Продукт B | желтый
Продукт C | желтый
Продукт А | черный
Продукт B | черный

То, что я хотел бы сделать, сгруппировать все по столбцу A и сделать столбец B списком значений, разделенных запятыми, которые разделяют столбец A, например, так:

Продукт | атрибут
---------- + --------------------------
Продукт А | Cyan, Magenta, Black
Продукт B | Cyan, желтый, черный
Продукт C | Cyan, Magenta, Yellow, Black

К сожалению, сводные таблицы знают только, как работать с числовыми значениями, и самое дальнее, что уходит к этому, - это подсчет количества раз, когда встречается столбец А.

В конечном итоге я смог осуществить это, импортировав данные в базу данных MySQL и используя GROUP_CONCAT(Attribute)функцию MySQL в запросе с GROUP BY Productпредложением, но после того, как несколько раз ударил себя по столу, пытаясь найти решение для Excel.

Для дальнейшего использования, возможно ли это в Excel без макросов? Будь то или нет, как бы это осуществить?

p0lar_bear
источник

Ответы:

31
   |     A     |     B
---+-----------+-----------
 1 |  PRODUCT  | ATTRIBUTE
 2 | Product A | Cyan
 3 | Product B | Cyan
 4 | Product C | Cyan
 5 | Product A | Magenta
 6 | Product C | Magenta
 7 | Product B | Yellow
 8 | Product C | Yellow
 9 | Product A | Black
10 | Product B | Black

Предполагая, что строка 1: 1 является строкой заголовка.

  1. Сортировать по столбцу А для группировки по продукту

  2. Подготовьте данные в разделенном запятыми формате в столбце C , введя в C2 следующую формулу и скопируйте в C3: C10.

    =IF(A2<>A1, B2, C1 & "," & B2)
    
  3. Определите полезные строки , введя в D2 =A2<>A3и скопируйте вниз в D3: D10.

  4. Скопируйте столбец C: D, затем вставьте специальное значение ( AltE- S- V- Enter). Теперь вы получите:

    Product A    Cyan       Cyan                   FALSE
    Product A    Magenta    Cyan,Magenta           FALSE
    Product A    Black      Cyan,Magenta,Black     TRUE
    Product B    Cyan       Cyan                   FALSE
    Product B    Yellow     Cyan,Yellow            FALSE
    Product B    Black      Cyan,Yellow,Black      TRUE
    Product C    Cyan       Cyan                   FALSE
    Product C    Magenta    Cyan,Magenta           FALSE
    Product C    Yellow     Cyan,Magenta,Yellow    TRUE
    
  5. Удалите ненужные строки , отфильтровав FALSEстолбец D с помощью автофильтра, а затем удалите эти строки.

  6. Готово . Колонка A & C - это то, что вам нужно.

Вильсон
источник
1
Это использует ваше воображение! Congrats!
jorgebg
Хотя это работает, времена изменились с 2012 года. Посмотрите ниже новый ответ, который использует надстройку PowerQuery (которая встроена в Excel 2016). Это не может быть проще. Ну, может, поговорить с компьютером и попросить его "сгруппировать мои данные!" Может быть, еще через 6 лет.
ripvlan
11

Я знаю, что это старый пост, но у меня был этот вызов сегодня. Я использовал надстройку PowerQuery от Microsoft (ПРИМЕЧАНИЕ: она встроена в Excel 2016 по умолчанию).

  1. Выберите стол
  2. На вкладке POWER QUERY (или DATA в 2016 году) выберите «Из таблицы»
  3. Нажмите на столбец «Продукт»
  4. на вкладке «Преобразование» выберите «Группировать по»
  5. Убедитесь, что на вкладке «Вид» установлен флажок «Панель формул».
  6. Изменить формулу

    ИЗ:

    = Table.Group(#"Changed Type", {"Product"}, {{"Count", each Table.RowCount(_), type number}})
    

    TO:

    = Table.Group(#"Changed Type", {"Product"}, {{"Attributes", each Text.Combine([Attribute], ", "), type text}})
    

    Нажмите здесь для изображения шагов с высоты

На шаге 6 используются формулы Power Query (M) для выполнения манипуляций с данными, которые не предоставляются посредством основных операций, предоставляемых в пользовательском интерфейсе. У Microsoft есть полная справка, доступная онлайн для всех расширенных функций, доступных в Power Query.

Матовая польша
источник
Очень элегантное решение, наверное, лучшее из всех.
asdmin
@matt Польша, интересно, знаете ли вы, как также удалить дублирующиеся значения вдоль строк, используя этот довольно удивительный трюк?
Лана Б
На шаге 1 (после выбора таблицы) вы сможете перейти на вкладку «Данные» на ленте и нажать «Удалить дубликаты».
Мэтт Польша
В Power Query есть еще один вариант, если вы не хотите изменять исходную таблицу. После ШАГА 2 вы можете удерживать клавишу CTRL и щелкнуть оба столбца, чтобы они оба были выделены. Затем щелкните правой кнопкой мыши один из столбцов и выберите «Удалить дубликаты». Затем перейдите к ШАГУ 3.
Мэтт Польша
Спасибо! Это лучший ответ. Для тех, кто использует Excel 2016, встроен PowerQuery. Просто нажмите вкладку «Данные», а затем нажмите «Из таблицы / диапазона» в разделе «Получить и преобразовать данные». Откроется редактор Power Query Editor, нажмите вкладку «Вид» и включите панель формул. Остальные инструкции работают как есть.
ripvlan
3

Вот пара подходов, оба "не макро" ...

  1. С небольшим набором данных, предварительно отсортировав его по продуктам (аналогично продукту GROUP BY), вы можете сначала скопировать столбец «Продукт», вставить его в другое место, а затем удалить дубликаты. Затем скопируйте «Атрибуты» для каждого продукта и «вставьте специальный, ТРАНСПОЗИРОВАТЬ» рядом с каждым продуктом. Затем объедините запятую с каждым из ваших транспонированных атрибутов в столбце окончательных результатов. По общему признанию, все это «копировать / вставлять специальные / транспонировать» быстро устареет, если у вас длинный список продуктов.

  2. Если у вас много данных, используя несколько формул, вы можете перейти к конечному результату, как показано ниже. Формулы в F2, G2, H2, I2 и N2 обозначены синими стрелками. Скопируйте их в строки ниже по мере необходимости. Обратите внимание, что J2: L2 использует ту же формулу, что и I2. Кроме того, формула F2 относится к именованному диапазону «Продукты», который охватывает диапазон A: A.

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

F106dart
источник
Это хорошие решения, хотя, как вы говорите, только если набор данных небольшой. Благодарность!
p0lar_bear