Страницы: 1
RSS
Разбиение текста ячеек по новым строкам
 
Здравствуйте! Буду очень благодарен, если кто-нибудь посоветует как можно имея данные в одной ячейке  разделить и перенести в новые строки. Я поискал в интернете и на этом сайте находил лишь по столбцам варианты, эксперименты со столбцами к нужному результату не привели.

В оригинале данные в таком же порядке. Можно ли как то пусть даже путем добавления разделителя в виде запятой, потом создать новые строки. Если да, то как  добавить разделить не в ручную.
То есть у меня имеется строка в которой указанны данные о принадлежности человека к определенной группе. Но они указанны в одной ячейке. А мне нужно что была отдельная запись о каждой группе.

Файл примера прикрепляю. На листе до то что имею сейчас, на листе после то что хотелось бы.
С написанием макросов не знаком(.

Заранее благодарю.
Изменено: Wayne - 10.04.2016 08:37:13
 
См. вариант. Макрос будет работать корректно, если все данные в столбце Н первого листа будут именно такой структуры:
текст1 - перенос строки - текст2 - запятая - текст3.
 
Wayne. здравствуйте! У вас 2 задачи в проблеме. 1. Разбить дважды данные в столбце H по строкам (по 2 разделителям - перенос строки и запятая с пробелом)
Код
Sub TextOnRows()

'Автор: webley
'Редактор JayBhagavan
'Сайт: planetaexcel.ru (http://planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=64813&TITLE_SEO=64813-tekst-po-strokam-iz-yacheyki)

Dim cl As Range, rng As Range, rngTmp As Range
Dim strDelim$, strTmp$
Dim Arr() As String
Dim i&, n&, j&, k&
 
    strDelim = InputBox("Введите символ-разделитель")
    If strDelim = "перенос" Then strDelim = Chr(10)
    If strDelim = "" Then End
     
    If TypeName(Selection) = "Range" Then
        Set rng = Selection
        n = rng.Rows.Count
        For i = n To 1 Step -1
            With rng(i, 1)
                strTmp = .Value & strDelim
                Arr = Split(strTmp, strDelim)
                j = UBound(Arr, 1) - 1
                If j > 0 Then
                    .Offset(1).Resize(j).EntireRow.Insert Shift:=xlDown ', CopyOrigin:=xlFormatFromLeftOrAbove
                    Set rngTmp = .Resize(j + 1)
                    For k = 0 To j
                        rngTmp(k + 1, 1).Value = Arr(k)
                    Next k
                End If
            End With
        Next i
    End If
End Sub
Разделитель "перенос строки" в данном макросе вводится как "перенос"
Задача №2 состоит в том, чтобы заполнить пустые ячейки данными из вышестоящих. Ищите в приёмах "Заполнение пустых ячеек"
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Джек, обе задачи решены в моём варианте )
 
Юрий М, вы прислали, когда я писал...я уже потом увидел)) плюс ваш вариант очень крут (я его себе сохранил для изучения), решает всё в 1 нажатие, но привязан к конкретной таблице с конкретными разделителями для переноса в конкретном столбце. Кроме того, он переносит на другой лист, а может мне в текущей таблице нужно разбивать... А комбинация моих 2 решений универсальна - вы же знаете, как для меня важна универсальность ;) Это вам ничего не стоит код подправить, а мне для этого придётся людей отвлекать)))
Изменено: Jack_Famous - 10.04.2016 12:54:55 (невнятная формулировка "расположение". Дополнительные примеры)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack_Famous написал:
решает всё в 1 нажатие, но зависим от расположения
От расположения чего? )
 
Цитата
Макрос будет работать корректно, если все данные в столбце Н первого листа будут именно такой структуры:  текст1 - перенос строки - текст2 - запятая - текст3.
А TextOnRows от webley и FillRange из приёмов работают в Selection. И коды править не надо ;)
Изменено: Jack_Famous - 10.04.2016 12:26:13
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack_Famous написал:
работают в Selection. И коды править не надо
Я спросил про "расположение"... )
Зато нужно выделять (зачем?!!), указывать разделитель. Причём, в "Вашем" варианте запрашивается только один разделитель. А в примере их два. И предлагаемый вариант портит исходные данные, не выполняя вторую часть задачи. А по поводу того, что я предупредил, что формат должен быть именно таким, смотрим Правила:
Цитата
2.3. Приложите файл(ы) с примером <...> в реальной структуре и форматах данных того, что есть сейчас и того, что хотелось бы на выходе.
Что автором и было сделано.
Про универсальность: не бывает универсального макроса на все случаи жизни.
 
Юрий М, ну вот смотрите...вы решили проблему, как человек и говорил. А если у него всё то же самое, но в другом столбце этой таблицы или в нескольких столбцах, или разделитель один, или разделителей 3, или просто разделители другие - для каждого варианта ему тему создавать? Я что-то совсем не понимаю,.. Мне когда-то с этой проблемой очень помогли и я не вижу ничего страшного применить макрос от webley хоть 2, хоть 5 раз - это секунды (хотя лично я произвожу автосцепку для последующей расцепки по 1 разделителю) , а FillRange из комментариев, который я слепил из 2 макросов, можно применить сразу по всем вновь образованным пустым ячейкам - он заполнит их сразу значениями.
Так что если вы о том, что человек должен грамотнее объяснять суть задачи (что структура таблиц и разделители будут меняться, в данном случае), то вы правы. В любом случае, у автора есть оба варианта))
P.S.: на все случаи макросов не бывает, но есть возможность расширить функционал в пределах разновидности одной и той же задачи
Изменено: Jack_Famous - 10.04.2016 13:57:02
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Господа премного благодарен!!! Два варианта я увы не видел. Я воспользовался этим - И это решило мою задачу, так как в файле с примером я указал ровно точно такую же структуру как в оригинале. Насчет универсальности соглашусь, остались похожие задачки с другими разделителями, но их меньше) Так что Огромноё спасибо за помощь).

Джек Благодарю вас за помощь и потраченное время, увы я с макросами не знаком как писал выше, поэтому тот вариант оказался для меня удобнее. Не обижайтесь.
Изменено: Wayne - 10.04.2016 17:19:57
 
Юрий М - 1, Jack_Famous - 0  :D пожалуйста )))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Читают тему
Наверх