Страницы: 1
RSS
Добавление макросом знака в ячейку
 
Всем доброго дня!
Помогите начинающему, пожалуйста.
По работе, клиенты присылают артикулы без знака "-", у нас во всех артикулах этот знак присутствует после третьего знака справа, например: 54342123-234
Без этого знака в нашу 1С артикулы не загружаются.
Как макросом добавить этот знак выделив нужный диапазон?
В интернете нарыл много похожих примеров, но по аналогии сделать не получилось, знак всё время добавляется не там, где надо. Пока не понял логику языка.
В данный момент пользуюсь формулой =ЗАМЕНИТЬ(A1, ДЛСТР(А1)-2;;"-")
Заранее спасибо.
 
Код
s = "54342123234"
r = Left(s, Len(s) - 3) & "-" & Right(s, 3)
Изменено: KROKS - 16.04.2018 11:29:23
 
Код
For Each q In Selection: q.Value = Format(q, "#0-000"): Next
Изменено: SAS888 - 16.04.2018 12:12:08
Чем шире угол зрения, тем он тупее.
 
Получилось!
Спасибо всем кто откликнулся.
 
Радовался я радовался, пока мне не попался артикул формата 10113042P, то есть с буквой на конце. For Each q In Selection: q.Value = Format(q, "#0-000"): Next в этом случае не работает. Подскажите плис, какой макрос д.б. в этом случае. Заранее спасибо.
 
xMAXTERx, написал
Цитата
Подскажите плис, какой макрос д.б. в этом случае.
А чем не подошло решение из сообщения #2 ?
 
Или такой формат - работает и с числами, и с текстом
Код
?format(12345678,"&&&&&&&&-&&&")
12345-678
?format("10113042P","&&&&&&&&-&&&")
101130-42P
 
еще вариант макроса,кнопка test,перед запуском выделить диапазон
Код
Sub test()
   Dim t As Range
'выделить диапазон перед запуском макроса
   With CreateObject("VBScript.RegExp"): .Pattern = "(\d+)(.{3})$": .Global = True
    For Each t In Selection: t.Value = .Replace(t, "$1-$2"): Next
  End With
 End Sub

или паттерн

Код
 .Pattern = "(\d+)(\d{3})$"
Изменено: кузя1972 - 17.04.2018 16:40:03
 
Вариант на Power Query (если макросами - не принципиально):

Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Исходник", type text}}),
    #"Вставленные последние символы" = Table.AddColumn(#"Измененный тип", "Последние символы", each Text.End([Исходник], 3), type text),
    #"Вставлено: длина текста" = Table.AddColumn(#"Вставленные последние символы", "Длина", each Text.Length([Исходник]), Int64.Type),
    #"Вычтенное значение из столбца" = Table.TransformColumns(#"Вставлено: длина текста", {{"Длина", each _ - 3, type number}}),
    #"Вставленные первые символы" = Table.AddColumn(#"Вычтенное значение из столбца", "Первые символы", each Text.Start([Исходник], [Длина]), type text),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Вставленные первые символы", "Результат", each [Первые символы]&"-"&[Последние символы]),
    #"Другие удаленные столбцы" = Table.SelectColumns(#"Добавлен пользовательский объект",{"Результат"})
in
    #"Другие удаленные столбцы"
 
Спасибо всем большое. Сделал два макроса:
For Each q In Selection: q.Value = Format(q, "&&&&&&&&-&&&"): Next
и
For Each q In Selection: q.Value = Format(q, "&&&&&&&-&&&&"): Next
В артикулах. где только числа надо отделить 3 знака, в артикулах с буквой надо отделить 4 знака. Значительно ускорило процесс.
 
Можно объединить эти макросы в один:
Код
For Each q In Selection
    If q Like "*[0-9]" Then q.Value = Format(q, "&&&&&&&&-&&&") Else q.Value = Format(q, "&&&&&&&-&&&&")
Next
Чем шире угол зрения, тем он тупее.
 
SAS888 - Супер! Спасибо большое! Как же всё таки здорово обладать такими знаниями! Может подскажете как научиться? С чего начать?  
 
Подскажите, пожалуйста, что тут не так:
For Each q In Selection
   If q Like "*[0-9]" Then q.Value = Format(q, "&&&&&&&&-&&&") ElseIf q Like "[A-Z]#[A-Z]" Then q.Value = Format(q, "&&-&&&-&&") Else: q.Value = Format(q, "&&&&&&&-&&&&")
Next
   
   
End Sub
Добавил в формулу SAS888 ещё одно условие (выделил красным), стало ругаться на синтаксис, вроде всё по фэншую, как в учебнике.
Страницы: 1
Наверх