Страница 1 из 2
Удаление символов
Добавлено: 18 фев 2008, 07:34
colen
Исключить символы. Исключить из каждой строки текста группы символов, расположенные между скобками {,}. Сами скобки должны быть исключены. Предполагается, что внутри каждой пары скобок нет других скобок. Как это сделать?
Благодарю за помощь.
Re: Удаление символов
Добавлено: 18 фев 2008, 08:54
Dim_ok
Код: Выделить всё
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
Re: Удаление символов
Добавлено: 18 фев 2008, 10:57
SAS888
При Вашем условии
Предполагается, что внутри каждой пары скобок нет других скобок.
можно так (для столбца "А"):
Код: Выделить всё
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
P.S. "On Error Resume Next" - на случай отсутствия скобок в строке.
Re: Удаление символов
Добавлено: 18 фев 2008, 13:13
Aent
colen,
Для Excel
Код: Выделить всё
MyRegion.Replace What:="{*}", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Для Word
Код: Выделить всё
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "[{]*[}]"
.Replacement.Text = ""
.Forward = True
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
End With
Re: Удаление символов
Добавлено: 18 фев 2008, 13:15
Aent
Ctrl+H рулит

Re: Удаление символов
Добавлено: 21 фев 2008, 09:10
colen
Aent, Все правильно. но хотелось бы, чтобы программа сама находила этот текст. от { до }. в этом то и проблема в Worde...
Re: Удаление символов
Добавлено: 21 фев 2008, 09:38
SAS888
Немного измененный мой макрос просмотрит столбец "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
Re: Удаление символов
Добавлено: 22 фев 2008, 01:28
Aent
colen писал(а):Aent, Все правильно. но хотелось бы, чтобы программа сама находила этот текст. от { до }. в этом то и проблема в Worde...
Не понял вашу проблему. Я же показал как это сделать именно прогаммно на VBA. Вы просили удалить текст в скобках - приведённый код это и делает. Или вам нельзя пользоваться объектами Find и Replace ? Тогда переформулируйте условия.
На счёт того что бы "программа сама находила этот текст" то же непонятно. Там же используются подстановочные знаки. Если нужно собрать текст из скобок, то тем же FIND это делается на раз. Если же вопрос по чистому VBA без использования объектов MS OFFICE то чётче формулируйте задачу.
Re: Удаление символов
Добавлено: 22 фев 2008, 01:52
Aent
Код: Выделить всё
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
Re: Удаление символов
Добавлено: 26 фев 2008, 05:12
colen
Aent, спасибо. Все получается, если курсор поставить вначале текста.