Страница 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, спасибо. Все получается, если курсор поставить вначале текста.