Страницы: 1 2 След.
RSS
Обрезать слева и справа лишнее, код удаления по бокам
 
Здравствуйте, столкнулся с таким на мой взгляд сложным для меня заданием, нужен макрос обрезки
надо обрезать от чисел по обе стороны 1) до первого - включительно и 2) все что идет вместе с слешем /***/
лишние нули вначале убрать

2-0033/7/2014 *** ka
2-02-07/7/2015 a
2-061/14 ИТ bn
2-0253/11/2010
2-170-1200/17/2014 _ g
2-0121/22/2011

получить
33
2-7
61
253
170-1200
121
Изменено: next777pro - 29.07.2016 10:19:58
 
Почему из:
2-02-07/7/2015 a
Вы получили:
7
а не:
02-07
???

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
JayBhagavan написал:
02-07
исправил ) 2-7
 
Алгоритм такой я вижу:
1) находим в строке "-" (ПОИСК())
2) находим в строке "/" (ПОИСК())
3) через ПСТР() получаете желаемое.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
JayBhagavan написал:
находим в строке "-" (ПОИСК())
на том же месте обрезать как
 
Цитата
next777pro написал: на том же месте обрезать как
Макросом. Пишите, что не получится - ищите ответ, при не нахождении - спрашивайте.
Начните с поиска "вба строковые функции".

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
В VBA два раза сплит - по тире (на ДВЕ части) и по слэшу.
Вот только проблема из 02-07 получить 2-7, остальные ведущие нули уберёт сам Эксель.
 
Цитата
Hugo написал:
из 02-07 получить 2-7,
ладно пусть будут 02-07
 
Ну тогда вот:
Код
Function obrezatj(s As String)
Dim t$
t = Split(Split(s, "-", 2)(1), "/")(0)
t = Replace(t, " ", "")
If IsNumeric(t) Then
obrezatj = --t
Else
obrezatj = t
End If
End Function

 
Hugo, как сделать. чтобы ошибки не показывало, когда работает с пустыми ячейками
 
Hugo, работает прилично, возможно ли макрос сделать, чтобы на том же месте его обрабатывать
 
Можно.
И можно в цикле по ячейкам использовать в макросе эту функцию.
Но писать уже некогда.
 
Hugo, Спасибо большое, лучше по выбранным ячейкам) если будет время, подожду когда напишите
 
Цитата
next777pro написал:
подожду когда напишите
Попробуйте сами - принцип Вам ведь уже показали. Иначе так и будете с каждым вопросом (посмотрите, сколько уже их у Вас) бежать на форум  :)
 
Цитата
Юрий М написал:
колько уже их у Вас
да наболело, много работы вот и вопросы поперли
 
Используя уже сделанное:
Код
Sub Замена()
        Dim cell As Range 'переменная для перебора ячеек
        Dim r As Range 'переменная для диапазона используемых ячеек
        Set r = Selection 'ActiveSheet.UsedRange 'Все используемые ячейки
    For Each cell In r.Cells
    If cell.Value Like "*-*/*" Then cell = obrezatj(cell.Value)
    Next
End Sub

 
Hugo, спасибо огромное
 
добрый день,вариант функции для #1,в столбце G

 
Код
Function uuu$(t$)
 With CreateObject("VBScript.RegExp")
 If InStr(1, t, "-0") Then
 .Pattern = "^2\-0+([^/]+)/"
    uuu = Replace(.Execute(t)(0).Submatches(0), "0", "")
    Else
  .Pattern = "^2\-([^/]+)/"
  uuu = .Execute(t)(0).Submatches(0)
  End If
 End With
End Function
Изменено: sv2013 - 29.07.2016 12:12:29
 
вариант для #10 функция uuu1
 
Код
Function uuu1$(t$)
 With CreateObject("VBScript.RegExp")
 If InStr(1, t, "-0") Then
 .Pattern = "^2\-0+([^/]+)/"
     If .test(t) Then uuu1 = Replace(.Execute(t)(0).Submatches(0), "0", "") Else uuu1 = t
 Else
  .Pattern = "^2\-([^/]+)/"
     If .test(t) Then uuu1 = .Execute(t)(0).Submatches(0) Else uuu1 = t
 End If
 End With
End Function
Изменено: sv2013 - 29.07.2016 12:20:31
 
sv2013, Замечательно , спасибо огромное
 
sv2013, эта функция обрезает нули в остатке
2-0170/7/2014
2-0201/88/2015
выходит
17
21
а надо
170
201

а этот вышел как ни странно
2-1590/2/2014
1590
Изменено: next777pro - 29.07.2016 17:18:20
 
Hugo, Спасибо, лучше не бывает
Отлично
 
Если нужно убирать нули в строках типа 01-02 - то нужно допиливать RegExp, но я пас, так и не проникся... :(
 
Hugo, попробую это пережить)
 
добрый вечер,фактически мы меняем на ходу файл-пример,попробуйте еще uuu2 в столбце K(правда вторая строка не пойдет),нужен максимально расширенный файл-пример,на все случаи жизни
регулярку не подобрать...
Код
Function uuu2$(t$)
 With CreateObject("VBScript.RegExp")
 If InStr(1, t, "-0") Then
 .Pattern = "^2\-0+([^/]+)/"
     If .test(t) Then uuu2 = .Execute(t)(0).Submatches(0) Else uuu2 = t
 Else
  .Pattern = "^2\-([^/]+)/"
     If .test(t) Then uuu2 = .Execute(t)(0).Submatches(0) Else uuu2 = t
 End If
 End With
End Function
Изменено: sv2013 - 29.07.2016 18:02:00
 
sv2013, круто ) отлично, что сказать, замечательно

макрос от Hugo и ваша функция вместе просто бесподобна
Изменено: next777pro - 29.07.2016 18:14:16
 
sv2013, Как всегда, выполняете поиск два раза - браво!
There is no knowledge that is not power
 
добрый вечер,SuperCat,предложите свой вариант,у Вас бывает неплохо получается...
 
sv2013, если спереди есть ноль не обрабатывает (( вот такие не хочет
02-7/2/12
03-0002/12

и такие тоже
la 2-7/2/12
Изменено: next777pro - 29.07.2016 20:17:15
 
next777pro,скопировал вариант #29(что дано), в файл-пример,-а как для варианта #29 соответственно надо?(7 2 7)
Изменено: sv2013 - 29.07.2016 23:45:01
Страницы: 1 2 След.
Наверх