У меня есть таблица с большими данными, содержащими фамилию и домохозяйства семьи. И я пытаюсь получить их в уникальном списке, за которым следуют имена домохозяйств в виде значений, разделенных запятыми.
В таблице ниже поясняются входные данные и желаемый результат.
Вот необработанные данные.
Семья | Имена |
---|---|
Смит | Джейн |
Бойер | Аня |
Миллер | Катя |
Смит | Джон |
Бойер | Дуг |
Бойер | Сэм |
Миллер | Джо |
Смит | Джим |
Бойер | Джефф |
Я нашеланалогичный запрос, но он был для Python. Я ищу что-то в Excel, что может это сделать. Я пробовал Pivot table, но это не работает, так как он пытается агрегировать его.
решение1
Существует множество способов достижения желаемого результата, вот несколько способов, которые я знаю на данный момент:
▶️ Использование Power Query
, доступно в Windows Excel 2010+
иExcel 365 (Windows or Mac)
Чтобы использовать Power Query, выполните следующие действия:
- Сначала преобразуйте исходные диапазоны в таблицу и назовите ее соответствующим образом. Для этого примера я назвал ее
Table1
- Далее откройте пустой запрос из DataTab --> Get & Transform Data--> Get Data--> From Other Sources-->Blank Query
- Вышеуказанное позволяет Power Queryоткрыть окно, теперь из HomeTab --> Advanced Editor--> и вставьте следующее, M-Codeудалив все, что вы видите, и нажмитеDone
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Household", type text}, {"Names", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Household"}, {{"Names", each Text.Combine([Names],", "), type text}})
in
#"Grouped Rows"
- Наконец, чтобы импортировать его обратно в Excel--> Нажмите Close & Loadили Close & Load To--> Первый нажатый элемент создаст файл New Sheetс требуемым выводом, а последний выведет окно с вопросом, куда поместить результат.
▶️ Использование GROUPBY()
функции, доступной вMS365
Версия Office Insiders:
=GROUPBY(A2:A10,B2:B10,ARRAYTOTEXT,,0)
▶️ Или, используя LAMBDA()
вспомогательную функцию BYROW()
--> Применимо к текущему каналуMS365
=LET(
_data, A2:B10,
_household, TAKE(_data,,1),
_names, UNIQUE(_household),
HSTACK(_names, BYROW(_names, LAMBDA(x, TEXTJOIN(", ",1,IF(x=_household,TAKE(_data,,-1),""))))))
▶️ Или, используя POWER PIVOT
, доступно в Windows Excel 2013+
иExcel 365 (Windows)
Чтобы использовать Power Pivot, выполните следующие действия:
- Сначала преобразуйте исходные диапазоны в таблицу и назовите ее соответствующим образом. Для этого примера я назвал ее
Table_1
- Выберите ячейку в ваших данных и нажмите
Insert
Tab -> НажмитеPivot Table
-->Table/Range
Будет отображено какTable_1
, НажмитеNew Worksheet
илиExisting Worksheet
по вашему выбору, --> В последнем случае выберите местоположение ячейки и нажмитеAdd this data the Data Model
.
- Справа
Pivot Table
появится панель полей, щелкните правой кнопкой мышиTable_1
на панели и выберитеAdd Measure
- Введите название меры по вашему выбору и введите следующую формулу в разделе формул:
=CONCATENATEX(Table_1,[Names],", ")
- Нажмите «ОК», выберите
Household
и поместите вROWS
«Область», а «Измерение»Name-CommaSeparated
(используется в этом примере, вы можете изменить его) — вVALUES
«Область».
- На
Design
вкладке изменитеReport Layout
наShow in Tabular Form
, затем щелкнитеGrand Totals
и выберитеOff for Rows and Columns
, и вы получите желаемый результат.
⏩ Другая альтернативная версия для Excel 2016+
последующих версий:
=SUBSTITUTE(CONCAT(IF(D2=A$2:A$10,","&B$2:B$10,"")),",",,1)
В приведенной выше формуле необходимо нажать CTRL+ SHIFT+ ENTERпри выходе из режима редактирования только для старых версий.