Удаление символов
Модератор: Naeel Maqsudov
Исключить символы. Исключить из каждой строки текста группы символов, расположенные между скобками {,}. Сами скобки должны быть исключены. Предполагается, что внутри каждой пары скобок нет других скобок. Как это сделать?
Благодарю за помощь.
Благодарю за помощь.
Код: Выделить всё
Sub DelFigSk()
Dim j
Dim i
Dim a As String
For j = 1 To Range("A1").End(xlDown).Row
For i = 1 To Len(Cells(j, 1))
If Mid(Cells(j, 1), i, 1) <> "{" Then
a = a & Mid(Cells(j, 1), i, 1)
Else
Exit For
End If
Next i
For i = i + 1 To Len(Cells(j, 1))
If Mid(Cells(j, 1), i, 1) = "}" Then Exit For
Next i
For i = i + 1 To Len(Cells(j, 1))
a = a & Mid(Cells(j, 1), i, 1)
Next i
Cells(j, 1) = a
a = ""
Next j
End Sub
При Вашем условии
P.S. "On Error Resume Next" - на случай отсутствия скобок в строке.
можно так (для столбца "А"):Предполагается, что внутри каждой пары скобок нет других скобок.
Код: Выделить всё
Sub Main()
Dim i As Long, a, b
On Error Resume Next
For i = 1 To Cells(Columns("A").Rows.Count, "A").End(xlUp).Row
a = Split(Range("A1"), "{")
b = Split(Range("A1"), "}")
Cells(i, "A") = a(0) & b(1)
Next
End Sub
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
colen,
Для Excel
Для Word
Для Excel
Код: Выделить всё
MyRegion.Replace What:="{*}", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Код: Выделить всё
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "[{]*[}]"
.Replacement.Text = ""
.Forward = True
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
End With
Aent, Все правильно. но хотелось бы, чтобы программа сама находила этот текст. от { до }. в этом то и проблема в Worde...
Немного измененный мой макрос просмотрит столбец "A", исключит в ячейках данные, заключенные в фигурные скобки, а в той же строке столбца "B" выведет эти данные (если они есть).
Код: Выделить всё
Sub Main()
Dim i As Long, a, b, c
On Error Resume Next
For i = 1 To Cells(Columns("A").Rows.Count, "A").End(xlUp).Row
a = Split(Cells(i, "A"), "{")
b = Split(Cells(i, "A"), "}")
c = Split(a(1), "}")
Cells(i, "A") = a(0) & b(1)
Cells(i, "B") = c(0)
Next
End Sub
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
Не понял вашу проблему. Я же показал как это сделать именно прогаммно на VBA. Вы просили удалить текст в скобках - приведённый код это и делает. Или вам нельзя пользоваться объектами Find и Replace ? Тогда переформулируйте условия.colen писал(а):Aent, Все правильно. но хотелось бы, чтобы программа сама находила этот текст. от { до }. в этом то и проблема в Worde...
На счёт того что бы "программа сама находила этот текст" то же непонятно. Там же используются подстановочные знаки. Если нужно собрать текст из скобок, то тем же FIND это делается на раз. Если же вопрос по чистому VBA без использования объектов MS OFFICE то чётче формулируйте задачу.
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
Код: Выделить всё
Public Function DelPar(s As String) As String
Dim i As Long, j As Long
i = InStr(s, "{")
Do While (i > 0)
j = InStr(i + 1, s, "}")
If j > 0 Then
' Mid(s, i, j - i + 1) - удаляемая строка
s = Left(s, i - 1) & Mid(s, j + 1)
Else
'возможная обработка для непарной "{"
End If
i = InStr(s, "{")
Loop
DelPar = s
End Function
Aent, спасибо. Все получается, если курсор поставить вначале текста.