Я думаю, что для этого потребуется VBA или Power Query, потому что вы говорите о необходимости проанализировать данные, чтобы определить, в какой столбец они попадают. На самом деле это очень легко сделать в Power Query, но если вы даже не слышали о Power Query (он встроен в Excel 2016+ и является бесплатной надстройкой для 2013), то это решение, вероятно, выходит за рамки без подробных объяснений. что такое Power Query.
При этом для всех, кого это интересует, я взял этот фиктивный набор данных и преобразовал его в выходную таблицу с помощью Power Query, который, как мне кажется, был задан в вопросе.


Это код для запроса. Вкратце, мы разбиваем его по разделителям и индексируем. Затем основной трюк заключается в использовании функции Group в сочетании с функцией Transpose, чтобы получить разделенные столбцы в набор неотключенных данных. После расширения обратно из группы мы можем отделить раздел «ABCD» от ответа и развернуть его, чтобы выровнять столбцы ABCD с исходными записями.
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Split Column by Delimiter" = Table.SplitColumn(Source, "Column1", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3", "Column1.4"}),
#"Added Index" = Table.AddIndexColumn(#"Split Column by Delimiter", "Index", 1, 1),
#"Grouped Rows" = Table.Group(#"Added Index", {"Index"}, {{"Rows", each Table.Transpose(Table.RemoveColumns(_, {"Index"})), type table}}),
#"Expanded Rows" = Table.ExpandTableColumn(#"Grouped Rows", "Rows", {"Column1"}, {"Rows.Column1"}),
#"Filtered Rows" = Table.SelectRows(#"Expanded Rows", each ([Rows.Column1] <> null)),
#"Split Column by Delimiter1" = Table.SplitColumn(#"Filtered Rows", "Rows.Column1", Splitter.SplitTextByDelimiter(". ", QuoteStyle.Csv), {"Selection", "Answer"}),
#"Pivoted Column" = Table.Pivot(#"Split Column by Delimiter1", List.Distinct(#"Split Column by Delimiter1"[Selection]), "Selection", "Answer")
in
#"Pivoted Column"