Страницы: 1
RSS
Как разбить одну строку на две
 
Добрый день, уважаемые участники форума. На Ваше рассмотрение хочу подкинуть маленький вопрос.    
 
Есть строка: 1,2;2;X;2;2;2;1;1;1;2;2;X;2;1;  
 
Как её разбить минимум на две строки, пример:  
 
1;2;X;2;2;2;1;1;1;2;2;X;2;1;  
 
2;2;X;2;2;2;1;1;1;2;2;X;2;1;  
 
И максимум на несколько строк. Мне нужно, чтобы исходная строка была разбита на количество строк, равным количеству запятых (!!не точек с запятой!!). Заранее благодарю за помощь...а если непонятно объяснил, то могу уточнить неясности.
 
{quote}{login=Skatastrophe}{date=07.06.2012 04:37}{thema=Как разбить одну строку на две}{post}... а если непонятно объяснил, то могу уточнить неясности.{/post}{/quote}  
Уточняйте! В файле *.xls, установленного Правилами размера... ;) -59587-
 
{quote}{login=Skatastrophe}{date=07.06.2012 04:37}{thema=Как разбить одну строку на две}{post}Есть строка: 1,2;2;X;2;2;2;1;1;1;2;2;X;2;1;  
И максимум на несколько строк. Мне нужно, чтобы исходная строка была разбита на количество строк, равным количеству запятых {/post}{/quote}по Вашему условию должно получиться  
1 и    
2;2;X;2;2;2;1;1;1;2;2;X;2;1;  
каким образом получается    
1;2;X;2;2;2;1;1;1;2;2;X;2;1;  
 
2;2;X;2;2;2;1;1;1;2;2;X;2;1;  
 
ps/ желательно в файле .xls
 
Выше - я. Забыл войти.
 
Попробую объяснить более подробно, чтобы не возникали лишние вопросы потом.    
 
У меня есть столбец, состоящий из множества строк. В каждой строке 14 "ячеек", отделённых друг от друга точкой с запятой (;). Каждая "ячейка" в свою очередь может состоять из 1 или 2 или 3 символов (символы следующие: 1,2 или Х), которые отделяются друг от друга запятой.    
 
Мне необходимо найти те строки, в которых "ячейка" состоит из 2 или 3 символов и разбить их на 2 или 3 строчки соответственно.    
 
Также важно учесть, что в одной строке может находиться от 1 до 14 "ячеек", содержащих более 1 символа.  
 
Прикладываю пример файла, в котором красным показано, что необходимо сделать и весь исходный столбец.  
 
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
Весь исходный столбец (2000 строк) нам как-то не нужен...  
Нужно 15-20 строк исходного и что и где должны получить на выходе...  
 
зы. Решение макросом или формулами?
 
=ЗАМЕНИТЬ($D$4;НАЙТИ(",";$D$4)-СТРОКА(A1)+1;2;"")  
 
Это касется конкретного примера с запятой. А по поводу "Исходного столбца" непонятно. Куда должны разбиваться строки (вниз, вправо)? Что делать, если запятой нет?
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Можете выделить необходимое Вам количество строчек.  
<EM><FONT color=#99000><STRONG>Да нет же! Сколько чего выделять, объяснять не нужно. Файл удален. А Вам совет - почитать Правила. [МОДЕРАТОРЫ]</STRONG></FONT><STRONG></STRONG></EM>  
<EM>http://www.planetaexcel.ru/forum.php?thread_id=8735</EM>  
 
Требуется сделать таким образом, чтобы на выходе получился столбец, все строки которого содержат по 14 символов (не считая точек с запятой).    
 
Насчёт решения: я в Excel на уровне неуверенного пользователя, поэтому формулами было бы лучше, тем более, я имею небольшой опыт работы с ними, однако подойдёт любое решения вопроса. Главное, чтобы работало..  
 
Большое спасибо за помощь..
 
Off Классика: "...Можете выделить необходимое Вам количество строчек..."!!!  
Господа планетяне-старожилы, может хватит реверансов перед ТС, которым по фигу Правила?! Ведь было сказано еще в 16:43!.. Впрочем, каждый сам себе...  
ps Ничего ни к кому личного... -35243-
 
{quote}{login= Владимир}{date=07.06.2012 05:13}{thema=}{post}=ЗАМЕНИТЬ($D$4;НАЙТИ(",";$D$4)-СТРОКА(A1)+1;2;""){/post}{/quote}  
Спасибо за вариант решения! Относительно, куда должны разбиваться строки, я не знаю, как будет лучше, мне нужно чтобы исходный столбец трансформировался в тот, где в каждой строке будет по 14 символов. Ну а если запятой нет, то такую строку трогать не надо.
 
Ну и последний вопрос, что если запятых больше одной?
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
{quote}{login= Владимир}{date=07.06.2012 05:39}{thema=}{post}Ну и последний вопрос, что если запятых больше одной?{/post}{/quote}  
 
Если в строчке несколько запятых, то нужно вывести все возможные варианты:  
 
Например, X,1,2;2;X нужно разбить на  
 
Х;2;Х  
1;2;Х  
2;2;X  
 
 
Я благодарю всех за потраченное время, но если вопрос слишком сложен, то не надо уделять ему своё время. Он не такой важный.
 
Ну а если в трёх ячейках по три значения? Это уже 9 вариантов. А если в 10-ти по 3? А в 14-ти?  
Или затроения могут быть только в одной первой ячейке? Или в одной любой?  
Сполошные вопросы...
 
Да, сформулировать вопрос у меня получилось не лучшим образом. Необходимы все возможные варианты. Даже если во всех 14 ячейках по три варианта.    
 
В данный момент я разбираюсь в решении Владимира (кстати, большое ему спасибо!), которое практически то, что нужно, осталось лишь продумать то, куда будут выводить варианты, чтобы потом совершать как можно меньше ручных манипуляций.
 
тупо в лоб:  
 
Sub t()  
 Dim i%, j%, s$, x, y(0 To 13), k%, l%  
 Dim i00%, i01%, i02%, i03%, i04%, i05%, i06%, i07%, i08%, i09%, i10%, i11%, i12%, i13%  
 i = 12: j = 12: s = Cells(i, 2).Value  
 Do While Len(s)  
     
   If InStr(1, s, ",") = 0 Then  
     Cells(j, 3).Value = s  
     j = j + 1  
   Else  
     x = Split(s, ";")  
     For k = 0 To 13: y(k) = Split(x(k), ","): Next  
     For i00 = 0 To UBound(y(0))  
       For i01 = 0 To UBound(y(1))  
       For i02 = 0 To UBound(y(2))  
       For i03 = 0 To UBound(y(3))  
       For i04 = 0 To UBound(y(4))  
       For i05 = 0 To UBound(y(5))  
       For i06 = 0 To UBound(y(6))  
       For i07 = 0 To UBound(y(7))  
       For i08 = 0 To UBound(y(8))  
       For i09 = 0 To UBound(y(9))  
       For i10 = 0 To UBound(y(10))  
       For i11 = 0 To UBound(y(11))  
       For i12 = 0 To UBound(y(12))  
       For i13 = 0 To UBound(y(13))  
         s = y(0)(i00) & ";" & y(1)(i01) & ";" & y(2)(i02) & ";" & y(3)(i03) & ";" & y(4)(i04) _  
           & ";" & y(5)(i05) & ";" & y(6)(i06) & ";" & y(7)(i07) & ";" & y(8)(i08) _  
           & ";" & y(9)(i09) & ";" & y(10)(i10) & ";" & y(11)(i11) & ";" & y(12)(i12) & ";" & y(13)(i13) & ";"  
         Cells(j, 3).Value = s  
         j = j + 1  
     Next i13, i12, i11, i10, i09, i08, i07, i06, i05, i04, i03, i02, i01, i00  
   End If  
   i = i + 1: s = Cells(i, 2).Value  
 Loop  
End Sub  
 
 
пс. да, я знаю, что некрасиво.  
и я даже подозреваю, что это вряд ли оптимально по скорости (речь не о поячеечном выводе).  
но - если бы у меня вдруг появилась такая РАЗОВАЯ задача, я бы её сделал именно так. ))
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Страницы: 1
Читают тему
Наверх