Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Удалить данные после последней запятой в строке - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удалить данные после последней запятой в строке (Макросы/Sub)
Удалить данные после последней запятой в строке
sd31337 Дата: Вторник, 01.04.2014, 14:08 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Добрый день!

Обращаюсь еще раз к Вам с просьбой помочь .

Есть столбец с адресами , в конце каждого адреса есть запятая и пробел , как с помощью VBA удалить последнюю запятую и все что идет после нее в том числе пробел

г.Москва , улица Новопесчаня д.21, и если можно подсказать тоже действие только удалить нужно первую запятую в начале строки если такова имеется ,г.Москва , улица Новопесчаня д.21

Нашел на другом форуме пример такого вида
[vba]
Код
Function franklin(r As Range)
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
With re
.Global = True
.Pattern = ",[^,]*$"
franklin = .Replace(r.Text, "")
End With
End Function
[/vba]

Не совсем понял как привязать данный код к листу , подскажите если не трудно
К сообщению приложен файл: 4561539.xlsx (10.8 Kb)


Сообщение отредактировал Serge_007 - Вторник, 01.04.2014, 20:52
 
Ответить
СообщениеДобрый день!

Обращаюсь еще раз к Вам с просьбой помочь .

Есть столбец с адресами , в конце каждого адреса есть запятая и пробел , как с помощью VBA удалить последнюю запятую и все что идет после нее в том числе пробел

г.Москва , улица Новопесчаня д.21, и если можно подсказать тоже действие только удалить нужно первую запятую в начале строки если такова имеется ,г.Москва , улица Новопесчаня д.21

Нашел на другом форуме пример такого вида
[vba]
Код
Function franklin(r As Range)
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
With re
.Global = True
.Pattern = ",[^,]*$"
franklin = .Replace(r.Text, "")
End With
End Function
[/vba]

Не совсем понял как привязать данный код к листу , подскажите если не трудно

Автор - sd31337
Дата добавления - 01.04.2014 в 14:08
Gustav Дата: Вторник, 01.04.2014, 14:34 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2699
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Не совсем понял как привязать данный код к листу , подскажите если не трудно

Засунуть всё это надо в модуль, придав модулю примерно следующий вид:
[vba]
Код
Option Explicit

Dim re As Object

Function franklin(r As Range)

        If re Is Nothing Then
            Set re = CreateObject("VBScript.RegExp")
            re.Global = True
            re.Pattern = ",[^,]*$"
        End If

        franklin = re.Replace(r.Text, "")

End Function
[/vba]
Функцию franklin далее можно использовать на рабочем листе, как любую встроенную функцию Excel. Примерно так: =franklin(A3)

P.S. С шаблоном (pattern) там небольшая неувязочка в этой функции - пока не удаляет ведущую запятую. Сейчас подправим... Сделано, оператору с Pattern надо такой вид придать:

[vba]
Код
re.Pattern = "^ ,|,[^,]*$"
[/vba]
и сохранить, закрыть и снова открыть файл.
К сообщению приложен файл: Regex_03.xls (36.5 Kb)


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Вторник, 01.04.2014, 14:51
 
Ответить
Сообщение
Не совсем понял как привязать данный код к листу , подскажите если не трудно

Засунуть всё это надо в модуль, придав модулю примерно следующий вид:
[vba]
Код
Option Explicit

Dim re As Object

Function franklin(r As Range)

        If re Is Nothing Then
            Set re = CreateObject("VBScript.RegExp")
            re.Global = True
            re.Pattern = ",[^,]*$"
        End If

        franklin = re.Replace(r.Text, "")

End Function
[/vba]
Функцию franklin далее можно использовать на рабочем листе, как любую встроенную функцию Excel. Примерно так: =franklin(A3)

P.S. С шаблоном (pattern) там небольшая неувязочка в этой функции - пока не удаляет ведущую запятую. Сейчас подправим... Сделано, оператору с Pattern надо такой вид придать:

[vba]
Код
re.Pattern = "^ ,|,[^,]*$"
[/vba]
и сохранить, закрыть и снова открыть файл.

Автор - Gustav
Дата добавления - 01.04.2014 в 14:34
sd31337 Дата: Вторник, 01.04.2014, 14:55 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Gustav,

Все заработало , только все данные меняются не в столбце А а копируются в столбец В уже в измененном виде ( а как сделать что бы в том же столбце менял данные ?


Сообщение отредактировал sd31337 - Вторник, 01.04.2014, 15:11
 
Ответить
СообщениеGustav,

Все заработало , только все данные меняются не в столбце А а копируются в столбец В уже в измененном виде ( а как сделать что бы в том же столбце менял данные ?

Автор - sd31337
Дата добавления - 01.04.2014 в 14:55
sd31337 Дата: Вторник, 01.04.2014, 15:14 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Gustav,

Вы гений , спасибо Вам огромное , понял что к чему , еще раз спасибо огромное за помощь
+)
 
Ответить
СообщениеGustav,

Вы гений , спасибо Вам огромное , понял что к чему , еще раз спасибо огромное за помощь
+)

Автор - sd31337
Дата добавления - 01.04.2014 в 15:14
Gustav Дата: Вторник, 01.04.2014, 15:16 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2699
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
после протяжки убирается все после первой запятой , остается только г.Москва

ну как-то так, да, если запятая единственная, то она и первая, и последняя :)
хм-хм-хм... Вам это один раз надо сделать? Сделать и забыть? Если так, то я бы воспользовался функционалом "Текст по столбцам" с разделителем запятая. Потом бы слил две колонки черз запятую. Чесслово, лениво сейчас над регуляркой думать, да и времени нет особо - на работе же...

P.S. А! Ну хорошо, само значит рассосалось :)


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Вторник, 01.04.2014, 15:18
 
Ответить
Сообщение
после протяжки убирается все после первой запятой , остается только г.Москва

ну как-то так, да, если запятая единственная, то она и первая, и последняя :)
хм-хм-хм... Вам это один раз надо сделать? Сделать и забыть? Если так, то я бы воспользовался функционалом "Текст по столбцам" с разделителем запятая. Потом бы слил две колонки черз запятую. Чесслово, лениво сейчас над регуляркой думать, да и времени нет особо - на работе же...

P.S. А! Ну хорошо, само значит рассосалось :)

Автор - Gustav
Дата добавления - 01.04.2014 в 15:16
Wasilich Дата: Вторник, 01.04.2014, 19:11 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
На примере ТС, так можно выкрутиться.
[vba]
Код
Sub Исправить()
    Dim i&
    For i = 3 To 12
       Cells(i, 1) = Trim(Cells(i, 1))
       If Left(Cells(i, 1), 1) = "," Then Cells(i, 1) = Mid(Cells(i, 1), 2)
       If Right(Cells(i, 1), 1) = "," Then Cells(i, 1) = Left(Cells(i, 1), Len(Cells(i, 1)) - 1)
    Next
    Range("A3:A12").Replace " ,", ",", xlPart
End Sub
[/vba]


Сообщение отредактировал Wasilic - Вторник, 01.04.2014, 19:12
 
Ответить
СообщениеНа примере ТС, так можно выкрутиться.
[vba]
Код
Sub Исправить()
    Dim i&
    For i = 3 To 12
       Cells(i, 1) = Trim(Cells(i, 1))
       If Left(Cells(i, 1), 1) = "," Then Cells(i, 1) = Mid(Cells(i, 1), 2)
       If Right(Cells(i, 1), 1) = "," Then Cells(i, 1) = Left(Cells(i, 1), Len(Cells(i, 1)) - 1)
    Next
    Range("A3:A12").Replace " ,", ",", xlPart
End Sub
[/vba]

Автор - Wasilich
Дата добавления - 01.04.2014 в 19:11
KuklP Дата: Вторник, 01.04.2014, 22:40 | Сообщение № 7
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Васильич,
На примере ТС
можно чуть проще и шустрей:
[vba]
Код
Sub Исправить()
     Dim i&, s$
     For i = 3 To 12
         s = Trim$(Cells(i, 1)): s = Mid$(s, 1, InStrRev(s, ",") - 1)
         Cells(i, 1) = IIf(Left$(s, 1) = ",", Mid$(s, 2), s)
     Next
     Range("A3:A12").Replace " ,", ",", xlPart
End Sub
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Вторник, 01.04.2014, 22:45
 
Ответить
СообщениеВасильич,
На примере ТС
можно чуть проще и шустрей:
[vba]
Код
Sub Исправить()
     Dim i&, s$
     For i = 3 To 12
         s = Trim$(Cells(i, 1)): s = Mid$(s, 1, InStrRev(s, ",") - 1)
         Cells(i, 1) = IIf(Left$(s, 1) = ",", Mid$(s, 2), s)
     Next
     Range("A3:A12").Replace " ,", ",", xlPart
End Sub
[/vba]

Автор - KuklP
Дата добавления - 01.04.2014 в 22:40
Wasilich Дата: Среда, 02.04.2014, 14:43 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Привет Сергей.
Да уж, делая поэтапно с проверкой результата, так и оставил запись в ячейку, вместо переменной.
[vba]
Код
Cells(i, 1) = Trim(Cells(i, 1))
[/vba]А в общем то, главное идея, да! :)
Тем более, что для ТС вопрос решен.


Сообщение отредактировал Wasilic - Среда, 02.04.2014, 14:44
 
Ответить
СообщениеПривет Сергей.
Да уж, делая поэтапно с проверкой результата, так и оставил запись в ячейку, вместо переменной.
[vba]
Код
Cells(i, 1) = Trim(Cells(i, 1))
[/vba]А в общем то, главное идея, да! :)
Тем более, что для ТС вопрос решен.

Автор - Wasilich
Дата добавления - 02.04.2014 в 14:43
vusafarov Дата: Пятница, 25.04.2014, 16:37 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Всем добрый день. По поводу запятой в данном топке понятно, а как надо данный макрос изменить, если необходимо удалить данные после "/" ?
 
Ответить
СообщениеВсем добрый день. По поводу запятой в данном топке понятно, а как надо данный макрос изменить, если необходимо удалить данные после "/" ?

Автор - vusafarov
Дата добавления - 25.04.2014 в 16:37
RAN Дата: Пятница, 25.04.2014, 21:22 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Очередной пИсатель, а не читАтель?

данный макрос

Кем данный?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеОчередной пИсатель, а не читАтель?

данный макрос

Кем данный?

Автор - RAN
Дата добавления - 25.04.2014 в 21:22
Gustav Дата: Понедельник, 28.04.2014, 11:29 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2699
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
а как надо данный макрос изменить, если необходимо удалить данные после "/" ?

Кем данный?

:) Если тот, который мной данный, и если надо удалить после последнего слэша, то вот так:
[vba]
Код
re.Pattern = "[^/]*$"
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
а как надо данный макрос изменить, если необходимо удалить данные после "/" ?

Кем данный?

:) Если тот, который мной данный, и если надо удалить после последнего слэша, то вот так:
[vba]
Код
re.Pattern = "[^/]*$"
[/vba]

Автор - Gustav
Дата добавления - 28.04.2014 в 11:29
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удалить данные после последней запятой в строке (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!