Строка с разделителями в отдельной строке Excel в отдельные столбцы - где значение начинается с A, B, C, но значения в строке не являются хронологическими - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть лист Excel, в котором есть значения из базы данных. В одной ячейке есть ответы на вопросы с несколькими вариантами ответов, разделенные символом "труба". Например, пользователь может спросить, какого цвета у вас машины? С такими параметрами, как:

A. Black
B. White
C. Red
D. Yellow

Таким образом, пользователь может ответить A, C и D. Эти значения хранятся в одной ячейке как «A. Черный | C. Красный | D. Желтый». Я хочу разделить каждое из этих значений в столбце A, B столбец, столбец C и столбец D.

Я пытался использовать функцию «Текст в столбец», но при этом известно, что столбец «А» должен содержать только «As».

Мне кажется, мне нужно добавить формулу в каждый столбец, который ищет "А.", "Б.", "С." или "Д." а затем находит следующий доступный символ канала. Я думаю, что мне нужна какая-то подстрока. Может быть, что-то вроде этого:

=LEFT(C2,LEN(C2)-FIND("A.",C2))

Но я не знаю, как найти следующее вхождение символа трубы - есть идеи? Может быть, в Excel есть функция nextIndexOf?

Большое спасибо заранее

1 Ответ

0 голосов
/ 19 ноября 2018

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

При этом для всех, кого это интересует, я взял этот фиктивный набор данных и преобразовал его в выходную таблицу с помощью Power Query, который, как мне кажется, был задан в вопросе.

enter image description here

enter image description here

Это код для запроса. Вкратце, мы разбиваем его по разделителям и индексируем. Затем основной трюк заключается в использовании функции 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...