Вопрос или проблема
У меня есть таблица с такими данными:
Товар | Атрибут ----------+---------- Товар A | Cyan Товар B | Cyan Товар C | Cyan Товар A | Magenta Товар C | Magenta Товар B | Yellow Товар C | Yellow Товар A | Black Товар B | Black
Я хотел бы сгруппировать все по столбцу A, а столбец B сделать списком значений, разделенным запятыми, которые имеют общий столбец A, например:
Товар | Атрибут ----------+-------------------------- Товар A | Cyan,Magenta,Black Товар B | Cyan,Yellow,Black Товар C | Cyan,Magenta,Yellow,Black
К сожалению, сводные таблицы работают только с числовыми значениями и могут лишь подсчитать количество вхождений в столбце A.
Мне удалось это сделать, импортировав данные в базу данных MySQL и используя функцию MySQL GROUP_CONCAT(Attribute)
в запросе с клаузой GROUP BY Product
, после многократных попыток найти решение в Excel.
Для справки в будущем, возможно ли это в Excel без использования макросов? Независимо от того, возможно это или нет, как можно этого добиться?
| A | B
---+-----------+-----------
1 | ТОВАР | АТРИБУТ
2 | Товар A | Cyan
3 | Товар B | Cyan
4 | Товар C | Cyan
5 | Товар A | Magenta
6 | Товар C | Magenta
7 | Товар B | Yellow
8 | Товар C | Yellow
9 | Товар A | Black
10 | Товар B | Black
Предположим, что строка 1:1 это строка заголовка.
-
Сортировка по столбцу A, чтобы сгруппировать по товарам
-
Подготовьте данные в формате, разделенном запятыми в столбце C, введя в C2 следующую формулу и скопировав до C3:C10.
=IF(A2<>A1, B2, C1 & "," & B2)
-
Определите нужные строки, введя в D2
=A2<>A3
и скопировав до D3:D10. -
Скопируйте столбцы C:D, затем вставьте их как значение (AltE–S–V–Enter). Вы получите:
Товар A Cyan Cyan FALSE Товар A Magenta Cyan,Magenta FALSE Товар A Black Cyan,Magenta,Black TRUE Товар B Cyan Cyan FALSE Товар B Yellow Cyan,Yellow FALSE Товар B Black Cyan,Yellow,Black TRUE Товар C Cyan Cyan FALSE Товар C Magenta Cyan,Magenta FALSE Товар C Yellow Cyan,Magenta,Yellow TRUE
-
Удалите ненужные строки, отфильтровав
FALSE
в столбце D с помощью автоматической фильтрации и удалив эти строки. -
Завершите. Столбцы A и C это то, что вам нужно.
Я знаю, что это старый пост, но у меня была такая задача сегодня. Я использовал дополнение PowerQuery от Microsoft (ПРИМЕЧАНИЕ: в Excel 2016 оно встроено по умолчанию).
- Выберите вашу таблицу
- На вкладке POWER QUERY (или ДАННЫЕ в 2016), выберите “Из таблицы”
- Нажмите на столбец “Товар”
- На вкладке Преобразование выберите “Группировать по”
- На вкладке Вид убедитесь, что “Строка формул” отмечена
-
Измените формулу
С:
= Table.Group(#"Changed Type", {"Product"}, {{"Count", each Table.RowCount(_), type number}})
НА:
= Table.Group(#"Changed Type", {"Product"}, {{"Attributes", each Text.Combine([Attribute], ", "), type text}})
Шаг 6 использует формулы Power Query (M) для выполнения манипуляций с данными, недоступных через базовые операции в интерфейсе. Microsoft предоставляет полную справку онлайн по всем доступным расширенным функциям в Power Query.
Вот несколько подходов, оба “без макросов”…
-
С небольшим объемом данных, после предварительной сортировки по товарам (похоже на группировку по товарам), вы могли бы сначала скопировать столбец “Товар”, вставить его в другое место, затем удалить дубликаты. Далее, скопируйте “Атрибуты” для каждого товара и “вставьте со специальными возможностями, ТРАНСПОЗИЦИЯ” рядом с каждым товаром. Затем объедините запятую с каждым из ваших транспонированных атрибутов в финальном результирующем столбце. Очевидно, что все это “копировать/вставить со специальными возможностями/транспонировать” быстро надоест, если у вас длинный список товаров.
-
Если у вас много данных, используя несколько формул, вы можете добиться конечного результата, как показано ниже. Формулы в F2, G2, H2, I2 и N2 указаны синими стрелками. Скопируйте их на строки ниже по мере необходимости. Обратите внимание, что J2:L2 используют ту же формулу, что и I2. Также формула F2 ссылается на именованный диапазон “Products”, который охватывает диапазон A:A.
Это старый вопрос, но я столкнулся с ним, пытаясь сделать то же самое, поэтому, если это кому-то поможет, теперь это можно сделать в ячейке, используя функции.
Предположим, ваши данные находятся в A1, это сгруппирует его по столбцу A, затем удалит дубликаты и отсортирует значения из столбца B. Если вы хотите сохранить дубликаты и не выполнять сортировку, то вам нужен только GROUPBY.
=LET(data, GROUPBY(A2:A10, B2:B10, ARRAYTOTEXT, 0, 0), HSTACK(INDEX(data, 0, 1), BYROW(data, LAMBDA(row, LET(val, INDEX(row, 1, 2), vals, TEXTSPLIT(val, ", ", , TRUE), TEXTJOIN(",", TRUE, SORT(UNIQUE(vals, TRUE))))))))
.
Ответ или решение
Чтобы решить задачу по группировке меток и конкатенации их текстовых значений в Excel, которая напоминает операции сводной таблицы, можно использовать несколько подходов. Однако важно помнить, что стандартные сводные таблицы в Excel работают в основном с числовыми данными, в то время как задача требует работы с текстовыми данными. Существует несколько методов решения этой задачи без использования макросов, и ниже представлены два основных подхода: через формулы Excel и с помощью Power Query.
Решение с использованием Excel формул
-
Сортировка и формула конкатенации:
-
Сортировка: Сначала отсортируйте таблицу по колонке "Product", чтобы сгруппировать одноименные продукты.
-
Формула в колонке C: Введите в ячейку C2 формулу:
=ЕСЛИ(A2<>A1; B2; C1 & "," & B2)
Скопируйте формулу на остальные строки таблицы. Эта формула создает список атрибутов для каждого продукта.
-
Выявление конечных строк: В ячейку D2 введите формулу
=A2<>A3
, что поможет определить, где заканчивается каждый продукт. Скопируйте формулу далее.
-
-
Фильтрация и извлечение результатов:
-
Фильтрация: Используйте автоматический фильтр, чтобы отобразить только строки с TRUE в колонке D. Это укажет на завершающие строки каждого уникального продукта.
-
Окончательное извлечение: Скопируйте и вставьте только значения из колонок A и C.
-
Решение с использованием Power Query
Power Query позволяет преобразовать данные непосредственно в Excel и особенно удобен для обработки больших объемов данных.
-
Импорт данных:
- Выберите таблицу ваших данных.
- Перейдите на вкладку Power Query (или Данные в Excel 2016 и новее), выберите опцию "Из таблицы".
-
Группировка и конкатенация:
- В меню Transform, выберите "Group By".
- Настройте формулу: измените стандартную группировочную функцию на:
= Table.Group(#"Changed Type", {"Product"}, {{"Attributes", each Text.Combine([Attribute], ", "), type text}})
- Это позволит создать сгруппированный список атрибутов для каждого продукта.
Заключение
Эти методы позволяют конкатенировать текстовые значения по группам в Excel, что может быть полезным для анализа данных аналогично сводной таблице. Использование Power Query может значительно ускорить процесс на больших наборах данных и сделать его более автоматизированным.
Эти решения помогут эффективно обработать данные без применения макросов, что делает их удобными для использования в стандартных рабочих процессах.