В ячейки из буфера вставляю тексты, что и где нужно сделать, чтобы в ячейку не лезли символы ;:!()*? и тп??? точки и запятые должны остаться. То есть, если я копирую и вставляю в ячейку текст в виде "Привет;как_дела?", то в ячейку вставляется "Привет как дела"
это реально сделать?
ДОбрый день!
В ячейки из буфера вставляю тексты, что и где нужно сделать, чтобы в ячейку не лезли символы ;:!()*? и тп??? точки и запятые должны остаться. То есть, если я копирую и вставляю в ячейку текст в виде "Привет;как_дела?", то в ячейку вставляется "Привет как дела"
Следующий макрос работает при вставке значений только в одну ячейку. Сам макрос должен находится не в модуле, а в листе. Работает только с этими символами и заменяет их на пробелы:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.ScreenUpdating = False
Dim X As String
If Selection.Value = "" Then Exit Sub
X = Selection.Value
X = Replace(X, "*", " ") X = Replace(X, ";", " ") X = Replace(X, ":", " ") X = Replace(X, "!", " ") X = Replace(X, "(", " ") X = Replace(X, ")", " ") X = Replace(X, "?", " ")
Selection.Value = X
Application.ScreenUpdating = True
End Sub
[/vba]
squadgazzz, здравствуйте.
Следующий макрос работает при вставке значений только в одну ячейку. Сам макрос должен находится не в модуле, а в листе. Работает только с этими символами и заменяет их на пробелы:
Function replacePunctuations$(ByVal txt$, Optional delim$ = " ") Dim regex As Object Set regex = CreateObject("vbscript.regexp") With regex .Global = True .IgnoreCase = True .MultiLine = True .Pattern = "([\.,;:'=+_\-\!\?\&\(\)])" End With replacePunctuations = regex.Replace(txt, delim) Set regex = Nothing End Function
Sub использование() MsgBox replacePunctuations("Привет;как_дела?") ' можно указать со своим разделителем: replacePunctuations("Привет;как_дела?", "свой разделитель") End Sub
[/vba]
На регулярках: [vba]
Код
Function replacePunctuations$(ByVal txt$, Optional delim$ = " ") Dim regex As Object Set regex = CreateObject("vbscript.regexp") With regex .Global = True .IgnoreCase = True .MultiLine = True .Pattern = "([\.,;:'=+_\-\!\?\&\(\)])" End With replacePunctuations = regex.Replace(txt, delim) Set regex = Nothing End Function
Sub использование() MsgBox replacePunctuations("Привет;как_дела?") ' можно указать со своим разделителем: replacePunctuations("Привет;как_дела?", "свой разделитель") End Sub
SkyPro, Pelena, thanks, that seems important. Регулярки выглядят компактнее моего варианта и точно выиграют, будь символов на проверку раза в два больше.
SkyPro, Pelena, thanks, that seems important. Регулярки выглядят компактнее моего варианта и точно выиграют, будь символов на проверку раза в два больше.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
внутри символьного класса экранирование спецсимволов не требуется. единственное "но" - минус должен быть либо в начале, либо в конце класса, иначе он играет другую роль. кроме того, в данной конкретной теме было условие:
да и внешние скобки здесь только замедляют работу, создавая ненужные сабматчи. а вот то, что ищется каждый раз по одному символу - не совсем гуд, ибо дольше. с учетом этого шаблон может быть такой: [vba]
Код
.Pattern = "[-;:'=+_!?&()]+"
[/vba]
внутри символьного класса экранирование спецсимволов не требуется. единственное "но" - минус должен быть либо в начале, либо в конце класса, иначе он играет другую роль. кроме того, в данной конкретной теме было условие:
да и внешние скобки здесь только замедляют работу, создавая ненужные сабматчи. а вот то, что ищется каждый раз по одному символу - не совсем гуд, ибо дольше. с учетом этого шаблон может быть такой: [vba]