2017-02-10 3 views
2

Ich arbeite in VBA und habe eine Zelle mit allen Buchstaben des Alphabets, und ich möchte alle Buchstaben ersetzen (mit nichts, "", oder eine Zahl, "0") sowie mögliche Interpunktion. Ich laufe es derzeit als:Ersetzen Sie mehrere Zeichen in einer Zeile VBA

val = Replace(val, "(", "") 
val = Replace(val, "]", "") 
val = Replace(val, "A", "") 
val = Replace(val, "B", "") 
val = Replace(val, "C", "") 
val = Replace(val, "D", "") 
val = Replace(val, "E", "") 
val = Replace(val, "F", "") 
val = Replace(val, "G", "") 
val = Replace(val, "H", "") 
val = Replace(val, "I", "") 
val = Replace(val, "J", "") 
val = Replace(val, "K", "") 
val = Replace(val, "L", "") 
val = Replace(val, "M", "") 
val = Replace(val, "N", "") 
val = Replace(val, "O", "") 
val = Replace(val, "P", "") 
val = Replace(val, "Q", "") 
val = Replace(val, "R", "") 
val = Replace(val, "S", "") 
val = Replace(val, "T", "") 
val = Replace(val, "V", "") 
val = Replace(val, "W", "") 
val = Replace(val, "X", "") 
val = Replace(val, "Y", "") 
val = Replace(val, "Z", "") 

Ich habe versucht:

val = Replace(val, "(", "") 
val = Replace(val, "]", "") 
val = Replace(val, "[A-TV-Z]", "") 

Ich könnte eine Schleife hinzufügen, aber dann wird die Rechenzeit nicht ändern.

Aber es funktioniert nicht. Gibt es eine Möglichkeit, die 25 Codezeilen durch eine einzelne Zeile zu ersetzen, wie ich es versucht habe, da ich 1M Zellen lesen muss, und es dauert eine lange Zeit, um derzeit zu laufen. Der traurige Teil ist, dieser Ersatz wird zu verschiedenen Anlässen überall durchgeführt.

Antwort

1

Sie versuchen regex kann. Ich kann das nicht in einer einzigen Zeile finden, aber es sollte schneller sein als Ihre aktuelle Version und hat weniger Zeilen. Beachten Sie, dass Sie einen Verweis auf die Microsoft VBScript Regular Expressions-Bibliothek benötigen.

Public Function Replacement(sInput) As String 

Dim regex As New RegExp 

With regex 
    .Global = True 
    .IgnoreCase = False 
End With 

regex.pattern = "[A-Z, a-z]" 
Replacement = regex.Replace(sInput, "") 


End Function 
+0

dies funktionierte, ich musste nur Funktionalität von der VBA-Platine hinzufügen. Tools ※ Referenzen und überprüft sowohl Microsoft VBScript Reguläre Ausdrücke 1.0 Microsoft und VBScript Reguläre Ausdrücke 5.5 – alex

+0

@alex nur eine der beiden Referenzen benötigt wird, oder Sie können späte Bindung stattdessen verwenden http://StackOverflow.com/questions/4556910/how -do-ich-bekomme-Regex-Unterstützung-in-Excel-über-eine-Funktion-oder-benutzerdefinierte-Funktion – Slai

2

Die Regex.Replace() Funktion wird benötigt, reguläre Ausdrücke zu verwenden:

val = Replace(val, "(", "") 
val = Replace(val, "]", "") 
val = Regex.Replace(val, "[a-z]", "", RegexOptions.IgnoreCase) 
Verwandte Themen