Страницы: 1
RSS
Выделить из строки отдельные текстовые и числовые данные по разделителю "скобка"
 
Нужно разделить данный текст и числовые значения на отдельные пункты и поменять местами пункт 6 и 2, собрав всё опять в строку. Пункты должны перенумероваться.
 
Покажите в примере ручками что должно получиться в итоге
 
Должна получиться строка, как в файле, только пункты 2 и 6 поменяны местами.
 
Пункты 2) и 6) должны поменяться местами
 
Артем Ифанов,
Во второй строке нет пункта 6, как быть?
 
=ЛЕВСИМВ(A1;ПОИСК("2)";A1)+2)&ПСТР(A1;ПОИСК("6)";A1)+3;999)&ПСТР(A1;ПОИСК("3)";A1)-1;ПОИСК("6)";A1)-ПОИСК("3)";A1)+4)&ПСТР(A1;ПОИСК("2)";A1)+3;ПОИСК("3)";A1)-ПОИСК("2)";A1)-3)
 
Настя_Nastya, по этой формуле во второй пункт добавляется пункт 6, а пункт 6 остается как и был ссылкой, а они должны поменяться местами. Может есть возможность разложить строку по пунктам в разные столбцы, а дальше уже разберемся?
Изменено: Артем Ифанов - 04.10.2020 17:19:27
 
Kuzmich, нужно чтобы ставило 6) и всё, а точнее 2) и все, а в 6) переносило со 2 пункта, они же должны меняться местами
 
Артем Ифанов, давайте пример строк на двадцать. Как есть и как должно быть. Посмотрим что у вас там за логика
 
Цитата
Артем Ифанов написал:
Может есть возможность разложить строку по пунктам в разные столбцы,
Код
=ЕСЛИОШИБКА(ЕСЛИОШИБКА(ПСТР($A1;ПОИСК(СТОЛБЕЦ()-1&")";$A1;1);ПОИСК(СТОЛБЕЦ(C$1)-1&")";$A1;1)-1-ПОИСК(СТОЛБЕЦ()-1&")";$A1;1));ПРАВСИМВ($A1;ДЛСТР($A1)-ПОИСК(СТОЛБЕЦ()-1&")";$A1;1)+1));"")
Не бойтесь совершенства. Вам его не достичь.
 
Михаил Л, вот посмотрите пример того, что нужно переделать.
 
Цитата
Артем Ифанов написал:
что нужно переделать
что нужно получить?
 
Михаил Л, нужно получить в итоге все пункты одной строкой, чтобы пункт 2 и пункт 6 были поменяны значения местами, а нумерация осталась, если где-то нет пункта 6, то чтобы писало просто 6) (если и пункт 2 и пункт 6 пустые), если в п 2 есть что-то - то оно должно переносится в п 6, а из 6 информация в п2 (если есть в 6). Вобщем поменять местами п2 и п6, если нет п 6, добавить.
Изменено: Артем Ифанов - 04.10.2020 19:14:47
 
Для ячейки А1 (вывод в ячейку В1, но можно и "на месте") Руки оторвать тому, кто готовит такие данные.
Код
Sub qqq()
Dim Arr, i As Long, Arr2, x
    Arr = Split(Range("A1"), ")")
    ReDim Arr2(1 To 6)
    For i = 1 To UBound(Arr)
        Arr2(i) = i & ") " & Left(Arr(i), Len(Arr(i)) - 2)
    Next
    x = Replace(Arr2(2), "2)", "6)")
    Arr2(2) = Replace(Arr2(6), "6)", "2)")
    Arr2(6) = x
    Range("B1") = Join(Arr2, "; ")
End Sub
 
Еще вариант
 
Михаил Л, спасибо большое! А если будет необходимо поменять местами 3 значения? Например пункт 4 на 6, 6 на 5, 5 на 4 ткните носом где что поменять и что добавить? Тяжело пока разбираюсь в таких громоздких формулах.
 
Цитата
Артем Ифанов написал:
Разбить строку на столбцы или поменять местами отдельные позиции в тексте
вроде тема такая, а вы там что-то меняете)))) или это не два вопроса?)
Изменено: Mershik - 04.10.2020 20:54:52
Не бойтесь совершенства. Вам его не достичь.
 
Юрий М, спасибо за макрос! А как сделать его не для одной строки, а для выделенного диапазона?
 
Перебрать ячейки в выделенном диапазоне. Справитесь сами? Только нужно уточнить - результат на месте или рядом?
 
Юрий М,вряд ли сам справлюсь. :) Лучше рядом. Спасибо!
 
Mershik, выносить в отдельную тему? Спасибо вам за помощь и участие в решении вопроса.
 
Цитата
Артем Ифанов написал:
где что поменять и что добавить?
Я уже сам не разберусь в этой формуле. Делал под задачу поменять пункт 2 на пункт 6.  Под другую задачу другую формулу надо.
 
Михаил Л, ясно, спасибо всё равно!
 
Вот вариант для выделенных в столбце А ячеек. Но возможны ошибки: в примере вторая строка имеет пропуски: нет данных по пункту 2.
Код
Sub qqq()
Dim Arr, i As Long, Arr2, x, rCell As Range
    For Each rCell In Selection
        Arr = Split(rCell, ")")
        ReDim Arr2(1 To 6)
        For i = 1 To UBound(Arr)
            Arr2(i) = i & ") " & Left(Arr(i), Len(Arr(i)) - 2)
        Next
        x = Replace(Arr2(2), "2)", "6)")
        Arr2(2) = Replace(Arr2(6), "6)", "2)")
        Arr2(6) = x
        rCell.Offset(0, 1) = Join(Arr2, "; ")
    Next
End Sub
 
Юрий М, спасибо!
Страницы: 1
Наверх