2016-05-20 8 views
1

Я форматированием столбца, что некоторые из значений имеют нежелательные данные в следующем формате:VBA удалить подстроку строки, которая находится между двумя конкретными символами

xxxx(yyyy)

Я только хочу, чтобы удалить то, что находится внутри скобок , а скобки сама

ответ

3

Вы можете легко обслужить несколько замен в одной колонке с Регулярное использование

Sub Test() 
Debug.Print CleanStr("xxxx(yyyy)") 
Debug.Print CleanStr("and me()") 
Debug.Print CleanStr("and me()` second string(aaa)") 
End Sub 

чистая строка

Function CleanStr(strIn As String) As String 
Dim objRegex As Object 
Set objRegex = CreateObject("vbscript.regexp") 
With objRegex 
    .Pattern = "\([^)]*\)" 
    .Global = True 
    CleanStr = .Replace(strIn, vbNullString) 
End With 
End Function 
1

Попробуйте это:

=LEFT(A1,FIND("(",A1)-1) 
+0

Вопрос действительно просил VBA. – brettdj

+0

@brettdj Вопрос был отмечен vba и excel. В вопросе нет слов, чтобы обозначить один над другим. И ОП, возможно, только что предположил, что это возможно только с vba. Если ОП, где провести различие, я с радостью удалю ответ. –

0

Dim x 
 
    x = Split("xxxx(yyyy)", "(") 
 
    Dim result 
 
    result = x(0)

+0

Этот фрагмент кода дает синтаксическую ошибку. – shoover

+0

Нет, он действительно работает. Я просто попробовал еще раз, и это работает отлично. Убедитесь, что код был скопирован правильно. – tfa

+0

Я нажал «Выполнить фрагмент кода» выше и получил «Ошибка: { « message »:« SyntaxError: missing; before statement », « filename »:« http://stacksnippets.net/js », « lineno » : 12, "colno": 16 } ' – shoover

1

Выберите ячейки, которые вы хотите обработать и запустить этот короткий макрос:

Sub DataGrabber() 
    Dim r As Range 
    For Each r In Intersect(ActiveSheet.UsedRange, Selection) 
     If InStr(1, r.Value, "(") > 0 Then 
      r.Value = Split(r.Value, "(")(0) 
     End If 
    Next r 
End Sub 
3

я хотел бы использовать регулярное выражение для этой работы:

Sub DeleteMatches() 
    Dim cell As Range, re As Object 

    ' define the regular expression to match "(...)" ' 
    Set re = CreateObject("VBScript.RegExp") 
    re.Pattern = "\([^)]*\)" ' matches "(...)" ' 

    ' iterate and clean each cell in range "C2:C100" ' 
    For Each cell In Range("C2:C100") 
    cell.Value = re.Replace(cell.Value, Empty) 
    Next 

End Sub 
Смежные вопросы