Страницы: 1
RSS
Текст из ячейки с переносами строки разделить на несколько ячеек построчно
 
Добрый день! Подскажите, пожалуйста, как разделить текст указанный в одной ячейке на несколько ячеек. Пример во вложении.
Спасибо
 
Вариант на Power Query:
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Исходная таблица", type text}, {"Столбец1", type text}}),
    #"Разделить столбец по разделителю" = Table.SplitColumn(#"Измененный тип","Столбец1",Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv),{"Столбец1.1", "Столбец1.2", "Столбец1.3", "Столбец1.4", "Столбец1.5", "Столбец1.6", "Столбец1.7", "Столбец1.8", "Столбец1.9", "Столбец1.10", "Столбец1.11", "Столбец1.12", "Столбец1.13", "Столбец1.14", "Столбец1.15", "Столбец1.16", "Столбец1.17", "Столбец1.18", "Столбец1.19", "Столбец1.20"}),
    #"Другие столбцы с отмененным свертыванием" = Table.UnpivotOtherColumns(#"Разделить столбец по разделителю", {"Исходная таблица"}, "Атрибут", "Значение"),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Другие столбцы с отмененным свертыванием",{"Атрибут"}),
    #"Переименованные столбцы" = Table.RenameColumns(#"Удаленные столбцы",{{"Значение", "Товары"}})
in
    #"Переименованные столбцы"

Можно конечно сделать разбивку через списки, так универсальнее будет, но я этого еще не очень сильно умею.
BOEHKOM, Сколько может быть в одной ячейке перечислено товаров?
Изменено: PooHkrd - 19.03.2018 17:16:09
Вот горшок пустой, он предмет простой...
 
А у меня  через Power Query вот так получилось:
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Исходная таблица", type text}, {"Столбец1", type text}}),
    #"Разделить столбец по разделителю" = Table.ExpandListColumn(Table.TransformColumns(#"Измененный тип", {{"Столбец1", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Столбец1"),
    #"Измененный тип1" = Table.TransformColumnTypes(#"Разделить столбец по разделителю",{{"Столбец1", type text}})
in
    #"Измененный тип1"
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
BOEHKOM, ЗДЕСЬ есть решение формулами.
Не бойтесь совершенства. Вам его не достичь.
 
Dyroff, Спасибо за вариант. По ковыряюсь в нем на досуге. Пора бы уже со списками научиться работать - очень мощный и универсальный инструмент!
Изменено: PooHkrd - 19.03.2018 17:26:49
Вот горшок пустой, он предмет простой...
 
PooHkrd, Да я его случайно обнаружил. Попытался сделать сначала тоже самое что и у Вас, но из-за того, что не знал, как из столбцов транспонировать в строки, стал рыть дальше и обнаружил, что у инструмента "разделить столбец" есть вариант разбития на строки а не только на столбцы) Ну а дальше пользовательский разделитель- перевод строки:)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
Dyroff написал:
обнаружил, что у инструмента "разделить столбец" есть вариант разбития на строки
Это что теперь кнопка такая имеется? А где, если не секрет? Что за версия Excel у вас?
Вот горшок пустой, он предмет простой...
 
PooHkrd, у меня 2016 Excel
Скрытый текст
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
У меня такого нету  :( Надо обновляться.
Вот горшок пустой, он предмет простой...
 
BOEHKOM, в этой теме есть макрос для разбивки. Работает с выделенным диапазоном. После него останется только автозаполнить пустые ячейки значениями из верхних — в комментариях есть макросы.
Изменено: Jack Famous - 19.03.2018 18:18:39
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
PooHkrd, это кнопка из Power Query - можно скачать с сайта Microsoft. Поддерживаются следующие версии Office:
  • Microsoft Office 2010 Professional Plus c Software Assurance
  • Microsoft Office 2013
В 2016 эта надстройка уже есть
 
формулы
 
Формула
Код
=IFERROR(INDEX(A$1:A$5;AGGREGATE(15;6;ROW(B$1:B$5)/(B$1:E$5<>"");ROWS($9:9)));"")
 
webley, Ну, если посмотреть мой пост за номером 2 в этой теме то я как бы в курсе откуда кнопка. Другой вопрос, что обновления на моей корпоративной версии офиса ставятся через пень-колоду, и в моей версии Excel 2016 такой кнопки еще нету.
Вот горшок пустой, он предмет простой...
 
Господа - товарищи!!! Не хочу новую тему создавать, дабы ибо... не нервировать никого... Пожалуйста помогите с помощью power query разбить одну ячейку как в примере на листе "исх. данные" так, что бы получилось как в примере на листе "как должно быть".

Исходные данные, конечно, будут меняться и по длине составных частей, и по количеству. (Это монотекст из АВТОКАДА! Там есть команда, которая превращает их рисункоподобные данные в один сплошной текст. Сама проблема не моя, знакомый просит). Почему-то ни на глаза, ни в голову не лезут четкие разделители.
Изменено: МГКБ - 28.02.2024 17:25:45
 
МГКБ, на самом деле задача может и бессмысленная, но интересная, достойная отдельной темы
алгоритм вроде как и получается, а вот над реализацией нужно пыхтеть )
 
Цитата
написал:
nilske
Да смысла честно говоря я тоже не нашел, но решение вроде бы слепил, но пока не получил несколько других примеров для универсализации... Вдруг где-то что-то не выскочит...

П.С. Но мое решение кривое!! Сообщество прошу ВАС всех, сделайте что-то красивое, универсальное, мощное... Что бы я свое решение на помойку выкинул!!
Спасибо большое!!!
 
МГКБ, добрый вечер. Не знаю насколько мое решение универсальное, но вдруг поможет.
Код
let
    src = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content][Столбец1]{0},
    lst = {"М1.701","В701","СН701"},
    acc = List.Sort( List.Accumulate(lst, {}, (s,c)=> s &  Text.PositionOf( src, c, Occurrence.All)), Order.Ascending),
    gen = Table.FromRecords( List.Generate(()=> [x = 1 , y = acc, s = Text.Middle (src, y{x-1}, y{x} - y{x-1}) , a = if                                                        Text.Contains(s, lst{0}) then x else null ],
                                each [x]<= List.Count(acc)   ,
                                each [x = [x] + 1, y =[y], s = try Text.Middle (src, y{x-1}, y{x} - y{x-1} ) otherwise Text.Middle (src, y{x-1} )  , a = if Text.Contains(s, lst{0}) then x else null ],
                                each [[s], [a]])),
    filld = Table.FillDown(gen,{"a"}),
    gr = Table.Combine( 
                Table.Group(filld, {"a"}, 
                                    {{"All", (x)=> 
                                    [ tab = List.Accumulate (lst, x, (s,c)=> Table.AddColumn(s, c, (y)=> if Text.Contains(y[s], c) then y[s] else null )), 
                                    filldown = Table.FillDown(tab, {lst{0}, lst{1}}), 
                                    select = Table.SelectColumns( 
                                                    Table.SelectRows(filldown, each Record.Field(_, lst{2}) <>  null), 
                                                            lst) & #table(lst, {{null, null,null}})
                                                            ][select]}}
                                )[All])
in
    gr
 
M
Пришелец-прораб.
 
Цитата
написал:
но вдруг поможет.
Спасибо большое!!!

Цитата
написал:
AlienSx
Ка же изящно, но ничего не понятно мне! Спасибо большое!!! Попробую разобрать, но это вряд ли ))))
 
Цитата
МГКБ написал:
но ничего не понятно мне!
это рекурсия, которая "пожирает" текст от текущей позиции до следующего разделителя и кладет это либо в текущую запись (т.е. строку в таблице) либо в новую запись (новую строку) по определенным условиям.
Изменено: AlienSx - 29.02.2024 10:56:38
Пришелец-прораб.
 
AlienSx, даже понятные шаги красивы, полёт мысли, так сказать, а уж как красивы непонятные )))
Страницы: 1
Наверх