So entfernen Sie den LETZTEN Satz Klammern aus einer Excel-text-string enthält nur numerische s

Ich habe eine excel-Tabelle mit über 50.000 Einträgen. Die Einträge haben einen Namen und eine Adresse und manchmal auch eine Telefonnummer, die ALLE in die gleiche Zeichenfolge. Habe ich mich auf die Telefon-Nummer der Teil der Zeichenkette, die immer am Ende und in Klammern eingeschlossen. Ich habe versucht, Sie zu verwenden von VBA-code, um dieses. So entfernen Sie den LETZTEN Satz Klammern aus einer Excel-text-string enthält nur numerische s zwischen den Klammern. In jedem gegebenen Zeichenfolge kann es entweder KEINE Klammern oder mehrere Klammern, aber ich will nur zu entfernen, die LETZTEN und lassen die zahlen, die dort enthalten sind, die in der Zeichenfolge

Beispiel string "Toone Carkeet J., agt.,Alliance Assurance Co. Ltd. (Provident Life branch), 3 St. Andrew st. (1936)" ich habe versucht mit VBScript.RegExp zu definieren "(1936)" aber ich kann nicht Holen Sie sich die RegExp, entspricht der Zeichenfolge und ersetzen Sie die Klammern () mit "".

For Each Cell In Range
    If strPattern<> "" Then
        strInput = Cell
        With regEx
            .Pattern="\(([0-9]))*)"
            .Global=False
        End With
        If .Pattern= True Then
            Replace(Cell.Value, "(","")
        End If

2 Antworten

  • user11450033
    4. Mai 2019

    Hier sind zwei schnelle Benutzer-definierte Funktionen, die sich nicht auf regulären Ausdrücken. Die erste verwendet VBA die StrReverse und die zweite InStrRev.

    Function RemoveParens1(str As String)
    
        str = StrReverse(str)
    
        str = Replace(str, "(", vbNullString, 1, 1)
        str = Replace(str, ")", vbNullString, 1, 1)
    
        RemoveParens1 = StrReverse(str)
    
    End Function
    
    Function RemoveParens2(str As String)
    
        Dim o As Integer, c As Integer
    
        o = InStrRev(str, "(")
        c = InStrRev(str, ")")
    
        str = Left(str, c - 1) & Mid(str, c + 1)
        str = Left(str, o - 1) & Mid(str, o + 1)
    
        RemoveParens2 = str
    
    End Function
    

    Wenn Sie nicht wollen, um den Einsatz von UDFs, wählen Sie einfach die Logik, die Methode, die Sie bevorzugen, und passen Sie es für Ihre eigenen Zwecke.

    Hier ist eine weitere Verwendung von regulären Ausdrucks Ersetzen.

    Function RemoveParens3(str As String)
    
        Static rgx As Object, cmat As Object, tmp As String
    
        If rgx Is Nothing Then Set rgx = CreateObject("vbscript.regexp")
    
        With rgx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = "\([0-9]*\)"
    
            If .test(str) Then
                Set cmat = .Execute(str)
                tmp = cmat.Item(cmat.Count - 1)
                tmp = Mid(tmp, 2, Len(tmp) - 2)
                str = .Replace(str, tmp)
            End If
        End With
    
        RemoveParens3 = str
    
    End Function
    
  • Ron Rosenfeld
    4. Mai 2019

    Hier ist ein Beispiel mit ähnlicher Logik zu verkaufen. Ich änderte den Namen der bereichsvariablen als es ist nicht eine gute Idee, verwenden Sie Schlüsselwörter für Variablen bezeichnet, auch wenn der editor wird es ermöglichen, dass.

    Statt nur löschen der Klammern, passen wir den gesamten (nnnn) Teilfolge mit den zahlen in eine Aufnahme-Gruppe, und ersetzen Sie dann das match mit nur die erfassten Gruppe.

    Da Ersetzen wird nicht alles tun, wenn keine übereinstimmung vorhanden ist, gibt es keine Notwendigkeit zu testen.

    Beachten Sie auch, dass wir die regEx AUßERHALB der Schleife.

    With regEx
        .Pattern = "\((\d+)\)"
        .Global = False
    End With
    
    For Each myCell In myRange
        myCell = regEx.Replace(myCell, "$1")
    Next myCell
    

    Wenn nötig, durch andere Teilstrings mit dem gleichen Muster, das Sie ändern könnte, das Muster, um sicherzustellen, dass am Ende der Zeile, oder, dass es das Letzte Muster dieses Typs, die in der Zeichenfolge.