VBA ist wunderbar, um verschiedene Dinge in der Microsoft Office-Welt zu automatisieren und sich ein paar schöne Hilfsmittel zu schaffen für ein effektiveres Arbeiten.
Eine typischer Fall, der nicht nur in VBA auftritt, sondern auch in vielen anderen Programmiersprachen, ist das Ersetzen eines Textes durch einen anderen Text. Das Ersetzen kann dabei vollständig erfolgen, oder es soll im Orignal-String nur ein Substring (Teiltext) ersetzt werden. Das könnte zum Beispiel eine Dateiendung in einem Dateinamen sein, die substituiert werden soll.
Replace-Funktion Parameter erläutert
Dafür gibt es im VBA die Replace-Funktion, welche die folgenden Parameter und Rückgabewerte aufweist.
Expression
Find
Das ist der gesuchte Text oder Textfragment (Substring), welcher in dem orginalen Text gefunden werden soll.
Replace
Das ist der Text mit dem der gesuchte Text ersetzt werden soll.
Start
Das ist ein optionaler Parameter. Hier kann man bestimmen, an welcher Stelle/Position im originalen Text mit dem Suchen und Ersetzen begonnen werden soll. Es handelt sich um ein Zahlenwert. Der erste Buchstabe beginnt bei 1. Dies ist etwas ungewöhnlich, da bei anderen Programmiersprachen immer bei null begonnen wird. Der Standardwert ist 1.
Count
Auch ein optionaler Parameter. Kommt der gesuchte Substring mehrmals im originalen Text vor, so kann man hier festlegen, wie oft der Substring ersetzt werden soll. Das ist praktisch, wenn man nur das erste Vorkommen eines Strings ersetzen möchte.
Compare
Selten benötigt man diesen Zahlenparameter, der die Vergleichsmethode festlegt. Der Standardwert genügt hier. Ansonsten gibt es
[-1] vbUseCompareOption
Bei Verwendung dieses Parameters muss eine Option-Compare-Anweisung der jeweiligen Prozedur vorangestellt werden.
[0] vbBinaryCompare
Es wird die binäre Repräsentation von gesuchten und durchsuchten String miteinander verglichen.
[1] vbTextCompare
Es wird ein Textvergleich zwischen gesuchten und durchsuchten String durchgeführt.
[2] vbDatabaseCompare
Wird nur in Microsoft Access verwendet für Vergleiche innerhalb von Datenbanken
Rückgabewert/Return
Der Rückgabewert ist der neue String mit den ersetzten Parametern.
Anwendungsbeispiele Replace-Funktion im VBA
Einfaches Beispiel ohne optionale Parameter
Hier werden alle gefundenen Substrings durch den zu ersetzenden Text substituiert.
Private Sub ReplaceExample1()
Dim strOriginal As String
Dim strSearch As String
Dim strReplace As String
Dim strNew As String
strOrignal = "Meine Oma fährt im Hühnerstall Motorrad!"
strSearch = "Motorrad"
strReplace = "Dreirad"
strNew = Replace(strOrignal, strSearch, strReplace)
'Ausgabe in Direktfenster
Debug.Print strNew
End Sub
Output/Ergebnis: Meine Oma fährt im Hühnerstall Dreirad!
Nur bestimmte Anzahl im String ersetzen
Bei diesem Beispiel wird nur ein ein Vorkommen des gesuchten Text ersetzt, da der optionale Parameter Count definiert wurde.
Private Sub ReplaceExample2()
Dim strOriginal As String
Dim strSearch As String
Dim strReplace As String
Dim strNew As String
strOrignal = "Gibst Du Opi Opium, bringt Opium Opi um!"
strSearch = "Opi"
strReplace = "Omi"
strNew = Replace(strOrignal, strSearch, strReplace, Count:=1)
Debug.Print strNew
End Sub
Output/Ergebnis: Gibst Du Omi Opium, bringt Opium Opi um!
String ab bestimmter Position durchsuchen
Diese Beispiel zeigt, wie ein String ab einer bestimmten Positione (20) durchsucht wird und die Vorkommen der gesuchten Zeichenkette ersetzt werden. Es wird dann auch nur der String ab der Startposition zurückgegeben.
Private Sub ReplaceExample3()
Dim strOriginal As String
Dim strSearch As String
Dim strReplace As String
Dim strNew As String
strOrignal = "Gibst Du Opi Opium, bringt Opium Opi um!"
strSearch = "Opium"
strReplace = "Omi"
strNew = Replace(strOrignal, strSearch, strReplace, Start:=20)
Debug.Print strNew
End Sub
Output/Ergebnis: bringt Omi Opi um!
Letzte Vorkommen einer Zeichenfolge ersetzen
Die optionalen Parameter Count und Start eignen sich nicht besonders gut, um das letzte Vorkommen eines Zeichens oder Zeichenkette zu ersetzen, da man nie weiß wie lang der orignale String ist. Um das letzte Vorkommen einer Zeichenkette in einem String zu ersetzen, muss man sich der Funktion strReverse bedienen. Diese dreht die Zeichenfolge einfach um, als ob man diese rückwärts lesen würde. Aus unserem “Opi” wird dann “ipO”. So kann man eine Ersetzung von hinten vornehmen.
Private Sub ReplaceExample4()
Dim strOriginal As String
Dim strSearch As String
Dim strReplace As String
Dim strNew As String
strOrignal = "Gibst Du Opi Opium, bringt Opium Opi um!"
strSearch = "Opi"
strReplace = "Omi"
strNew = StrReverse(Replace(StrReverse(strOrignal), StrReverse(strSearch), StrReverse(strReplace), Count:=1))
Debug.Print strNew
End Sub
Output/Ergebnis: Gibst Du Opi Opium, bringt Opium Omi um!