Страницы: 1
RSS
Как в ячейках поменять данные местами
 
Подскажите подскажите пожалуйста как сделать -
Есть таблица с данными типа -  артикул (буква-цифры или буква,буква,буква-цифры) пробел Название товара
пример КМ-6130(4) Комплект  Новогодних звездочек маленьких(всего 20шт.) 5 видов по 4 штуки в комплекте
, а нужно чтобы вместо этого стало КМ-6130(4) Комплект  Новогодних звездочек маленьких(всего 20шт.) 5 видов по 4 штуки в комплекте
При этом в столбце содержатся товары и без артикулов - соответственно с ними ничего делать не надо.
Пример файла прилагаю.
 
Непонятно, что должно измениться. В описании пишете вот есть... вот надо чтобы стало...
Я отличия найти не могу.
Дадите пояснения?
Кому решение нужно - тот пример и рисует.
 
Создал новый образец. сделал 1 столбец как ест сейчас и второй столбец примеры как надо
 
Попробуйте таким макросом.
Выделяете данные в столбце А, запускаете макрос.
Макрос такой:
Код
Sub t49()
Dim objC As Range
    For Each objC In Selection
        If objC.Value Like "*-###*" Then
            objC.Offset(0, 1).Value = Mid(objC.Value, InStr(1, objC.Value, " ", 1) + 1, Len(objC.Value) - InStr(1, objC.Value, " ", 1) + 1) & _
            " (" & Left(objC.Value, InStr(1, objC.Value, " ", 1) - 1) & ")"
        Else
            objC.Offset(0, 1).Value = objC.Value
        End If
    Next objC
End Sub
Кому решение нужно - тот пример и рисует.
 
Формулы. Несколько доп. столбцов. См. столбец "РЕЗУЛЬТАТ". (в файле строки обрезал)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
=ЕСЛИ(ЕОШ(ПОИСК("*-???? ";A2));A2;ПСТР(A2;ПОИСК(" ";A2;ПОИСК("*-???? ";A2)+1)+1;200)&" ("&ПСТР(A2;ПОИСК("*-???? ";A2);ПОИСК(" ";A2;ПОИСК("*-???? ";A2)+1)-ПОИСК("*-???? ";A2))&")")
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир, почему-то не срабатывает на 10 строке.
Работает если в артикле 4 цифры после тире и не работает если 3.
 
Как-то так. Работает с артикулом состоящим из 1-2 букв, тире и 3-4 цифр
Код
Function tt(Text As String) As String
With CreateObject("VBScript.RegExp")
    .Pattern = "(^.{1,2}-\d{3,4}) (.+?)(?=\.$|$)"
    If .test(Text) Then tt = .Replace(Text, "$2 ($1)") Else tt = Text
End With
End Function

 
MBT
Зачем в паттерне квантор жадности ? в части (.+?) , когда поиск идет и так до конца строки?
 
Без него он включает в $2 финальную точку, если она там есть. Попробуйте без него на этом варианте: ФМ-9056 Мини-Плакат вырубной Кормушка с птицами.
Изменено: МВТ - 14.10.2015 19:52:55
 
МВТ
Спасибо доктор
 
Kuzmich, всегда пожалуйста  :)
 
МВТ, код не срабатывает с такими артикулами как
Ш-5374 (4463)
М-007929
*Ф-6089-П
8218
КМ-6130(4)
Вообще  
 
Если есть возможность расскажите подробнее о вариантах решения (частях кода с помощью которых предлагается решить), чтобы я понял составные части кода и сам мог допилить.
Заранее благодарен.
 
Вероятно, что-то не доглядел - у Вас почти 3 тыс. строк пример. Надо было оставить 15-20 строк, по которым можно понять какие именно варианты артикулов могут быть. Что касается составных частей кода, это регулярные выражения - средство для обработки текста по шаблонам.
P.S. замените паттерн на этот и проверьте
Код
 .Pattern = "(^.{1,2}-?[\d\(\) ]+-?.?) (.+?)(?=\.$|$)"

Изменено: МВТ - 17.10.2015 21:07:28
 
У меня ещё два вопроса:
1. А есть программы на русском языке для автоматического составления регулярных выражений? (искал, но не нашёл)
2. Можно чтобы на выходе
из  Ш-6502 (5371) (4911) Без названия. Рамка (с Российской символикой)  получалось Без названия. Рамка (с Российской символикой) (Ш-6502) (5371) (4911)
из Ш-7477 (ПЛ-7477) Плакат А-2 Пожелания молодоженам (юмор) - Плакат А-2 Пожелания молодоженам (юмор) (Ш-7477) (ПЛ-7477)?
 
Цитата
Сергий написал: программы на русском
это 1С наверное
Страницы: 1
Наверх