Есть столбец с адресами , в конце каждого адреса есть запятая и пробел , как с помощью 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]
Не совсем понял как привязать данный код к листу , подскажите если не трудно
Добрый день!
Обращаюсь еще раз к Вам с просьбой помочь .
Есть столбец с адресами , в конце каждого адреса есть запятая и пробел , как с помощью 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
Не совсем понял как привязать данный код к листу , подскажите если не трудно
Засунуть всё это надо в модуль, придав модулю примерно следующий вид: [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]
Код
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
Все заработало , только все данные меняются не в столбце А а копируются в столбец В уже в измененном виде ( а как сделать что бы в том же столбце менял данные ?
Gustav,
Все заработало , только все данные меняются не в столбце А а копируются в столбец В уже в измененном виде ( а как сделать что бы в том же столбце менял данные ?sd31337
Сообщение отредактировал sd31337 - Вторник, 01.04.2014, 15:11
после протяжки убирается все после первой запятой , остается только г.Москва
ну как-то так, да, если запятая единственная, то она и первая, и последняя хм-хм-хм... Вам это один раз надо сделать? Сделать и забыть? Если так, то я бы воспользовался функционалом "Текст по столбцам" с разделителем запятая. Потом бы слил две колонки черз запятую. Чесслово, лениво сейчас над регуляркой думать, да и времени нет особо - на работе же...
после протяжки убирается все после первой запятой , остается только г.Москва
ну как-то так, да, если запятая единственная, то она и первая, и последняя хм-хм-хм... Вам это один раз надо сделать? Сделать и забыть? Если так, то я бы воспользовался функционалом "Текст по столбцам" с разделителем запятая. Потом бы слил две колонки черз запятую. Чесслово, лениво сейчас над регуляркой думать, да и времени нет особо - на работе же...
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]
На примере ТС, так можно выкрутиться. [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
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
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