Удаление символов

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

colen
Сообщения: 12
Зарегистрирован: 27 дек 2007, 06:44

Исключить символы. Исключить из каждой строки текста группы символов, расположенные между скобками {,}. Сами скобки должны быть исключены. Предполагается, что внутри каждой пары скобок нет других скобок. Как это сделать?
Благодарю за помощь.
Dim_ok
Сообщения: 51
Зарегистрирован: 03 июл 2007, 09:17

Код: Выделить всё

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
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

При Вашем условии
Предполагается, что внутри каждой пары скобок нет других скобок.
можно так (для столбца "А"):

Код: Выделить всё

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" - на случай отсутствия скобок в строке.
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

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
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Ctrl+H рулит ;)
colen
Сообщения: 12
Зарегистрирован: 27 дек 2007, 06:44

Aent, Все правильно. но хотелось бы, чтобы программа сама находила этот текст. от { до }. в этом то и проблема в Worde...
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Немного измененный мой макрос просмотрит столбец "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
Контактная информация:

colen писал(а):Aent, Все правильно. но хотелось бы, чтобы программа сама находила этот текст. от { до }. в этом то и проблема в Worde...
Не понял вашу проблему. Я же показал как это сделать именно прогаммно на VBA. Вы просили удалить текст в скобках - приведённый код это и делает. Или вам нельзя пользоваться объектами Find и Replace ? Тогда переформулируйте условия.
На счёт того что бы "программа сама находила этот текст" то же непонятно. Там же используются подстановочные знаки. Если нужно собрать текст из скобок, то тем же 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
colen
Сообщения: 12
Зарегистрирован: 27 дек 2007, 06:44

Aent, спасибо. Все получается, если курсор поставить вначале текста.
Ответить