Предполагая, что ваши данные находятся в постоянном формате, с 6 строками, разделенными lineFeed
, и данными в формате, который вы показываете, вы можете сделать это, используя Power Query
(доступно в Excel 2010 +)
Алгоритм
- Разделить столбцы по разделителю
lf
на новые строки - Добавить столбец
Index
, а затем Integer/Divide
столбец ( на 6), чтобы получить последовательность чисел, в которой мы можем сгруппировать оригинал (последовательность будет иметь вид {0,0,0,0,0,0,1,1,1,1,1,1,2,...}
- Сгруппировать оригинал по столбцу Integer / Divide
- Извлечь каждый элемент, используя различные функции разделения и индексы для возврата того, что мы хотим.
В этом примере я предположил, что lf
в вашем примере в вашем комментарии находятся в том же месте, что и показанный пример.
M-код
Если вы поместите курсор в столбец данных и Data-->Get & Transform-->From Table/Range
, он создаст таблицу и пометит столбец Column1
.Если вы затем вставите M-код в расширенный редактор в PQ и измените имя таблицы в L Если имя 2 присвоено вашим данным, запрос должен работать. Вы можете исследовать область Steps
, чтобы понять, что происходит
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Column1", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1", type text}}),
//Add Index and Integer/Divide column for subsequent grouping
#"Added Index" = Table.AddIndexColumn(#"Changed Type1", "Index", 0, 1, Int64.Type),
#"Inserted Integer-Division" = Table.AddColumn(#"Added Index", "Integer-Division", each Number.IntegerDivide([Index], 6), Int64.Type),
#"Removed Columns" = Table.RemoveColumns(#"Inserted Integer-Division",{"Index"}),
#"Grouped Rows" = Table.Group(#"Removed Columns", {"Integer-Division"}, {{"GROUPED", each _, type table [Column1=nullable text, #"Integer-Division"=number]}}),
#"Removed Columns1" = Table.RemoveColumns(#"Grouped Rows",{"Integer-Division"}),
//Extract each element into it's own column
#"Added Custom" = Table.AddColumn(#"Removed Columns1", "SEQ", each Text.Split(Table.Column([GROUPED],"Column1"){0},"."){0}),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Member ID", each Text.Trim(Text.Split(Table.Column([GROUPED],"Column1"){0},"MEMBER ID"){1})),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "Name", each Table.Column([GROUPED],"Column1"){1}),
#"Added Custom3" = Table.AddColumn(#"Added Custom2", "Address", each Text.Trim(Text.Split(Table.Column([GROUPED],"Column1"){2},"TEL"){0})),
#"Added Custom4" = Table.AddColumn(#"Added Custom3", "Telephone", each Text.Trim(Text.Split(Table.Column([GROUPED],"Column1"){2},"TEL :"){1})),
#"Added Custom5" = Table.AddColumn(#"Added Custom4", "Mobile", each Text.Split(Text.Trim(Text.Split(Table.Column([GROUPED],"Column1"){3},":"){1})," "){0}),
#"Added Custom6" = Table.AddColumn(#"Added Custom5", "FAX", each Text.Trim(Text.Split(Table.Column([GROUPED],"Column1"){3},"FAX :"){1})),
#"Added Custom7" = Table.AddColumn(#"Added Custom6", "E-Mail", each Text.Trim(Text.Split(Table.Column([GROUPED],"Column1"){4},":"){1})),
#"Added Custom8" = Table.AddColumn(#"Added Custom7", "Rep", each Text.Trim(Text.Split(Table.Column([GROUPED],"Column1"){5},":"){1})),
//Remove the Table column
#"Removed Columns2" = Table.RemoveColumns(#"Added Custom8",{"GROUPED"})
in
#"Removed Columns2"
Источник
Results
введите описание изображения здесь