С Power Query:
Сделайте тип данных столбца = text
Проверьте, является ли запись электронной почтой - используя @
но может быть более сложным
Добавить столбец индекса
Добавить еще один столбец, который содержит уникальный номер каждый раз, когда в столбце есть электронное письмо 1
Введите уникальные числа, чтобы каждая «группа» имела одинаковый номер
Сгруппируйте строки в столбце уникальных номеров
Извлеките данные из каждой строки в список с разделителями
Добавьте несколько logi c, чтобы разрешить вариации в количестве потенциальных столбцов, иначе запрос питания не адаптируется.
Разделить список данных на новые столбцы на основе разделителя
Попутно мы удалить посторонние столбцы
- Вставьте приведенный ниже код в редактор Power Query.
- Измените таблицу в строке 2, чтобы отразить настоящее имя таблицы на вашем листе.
- Дважды щелкните операторы в
Applied Steps
окно для изучения того, что делается на каждом шаге - Ссылка sh - это все, что должно потребоваться, если ваша таблица данных изменится.
M-код
let
Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "isEmail", each Text.Contains([Column1],"@")),
#"Added Index" = Table.AddIndexColumn(#"Added Custom", "Index", 0, 1, Int64.Type),
#"Added Custom1" = Table.AddColumn(#"Added Index", "Grouper", each if [isEmail] then [Index] else null),
#"Filled Down" = Table.FillDown(#"Added Custom1",{"Grouper"}),
#"Removed Columns" = Table.RemoveColumns(#"Filled Down",{"isEmail", "Index"}),
#"Grouped Rows" = Table.Group(#"Removed Columns", {"Grouper"}, {{"Grouped", each _, type table [Column1=nullable text, Grouper=number]}}),
#"Added Custom2" = Table.AddColumn(#"Grouped Rows", "Value", each Table.Column([Grouped],"Column1")),
#"Removed Columns2" = Table.RemoveColumns(#"Added Custom2",{"Grouper", "Grouped"}),
#"Added Custom3" = Table.AddColumn(#"Removed Columns2", "numSplits", each List.Count([Value])),
//Make column splitting dynamic for each refresh, in case maximum number of columns changes
splits = List.Max(Table.Column(#"Added Custom3","numSplits")),
newColList = List.Zip({List.Repeat({"Value"},splits),List.Generate(() => 1, each _ <= splits, each _ +1)}),
#"Converted to Table" = Table.FromList(newColList, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
newColNamesTbl = Table.TransformColumns(#"Converted to Table", {"Column1", each Text.Combine(List.Transform(_, Text.From)), type text}),
newColNamesList = Table.Column(newColNamesTbl,"Column1"),
#"Extracted Values" = Table.TransformColumns(#"Added Custom3", {"Value", each Text.Combine(List.Transform(_, Text.From), ";"), type text}),
#"Removed Columns1" = Table.RemoveColumns(#"Extracted Values",{"numSplits"}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Removed Columns1", "Value", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), newColNamesList)
in
#"Split Column by Delimiter"
Исходные данные
Results
введите описание изображения здесь