Ein häufiges Problem bei der Programmentwicklung ist die Verarbeitung von Zeichenketten (Strings). Die Programmiersprache VBA stellt eine ganze Reihe Funktionen für diese Aufgabe zur Verfügung. Dieser Artikel möchte die wichtigsten Funktionen zur Stringverarbeitung vorstellen und an kleinen Beispielen erläutern.
Zeichenketten miteinander verknüpfen
Zeichenketten können aneinander gehängt werden. Zum Beispiel möchten Sie an einen Dateinamen, der in einer Stringvariablen gespeichert ist, eine Dateiendung anhängen und anschließend den Dateinamen ausgeben. Die beiden Zeichenketten werden mit & aneinander gehängt.
Dim filename As String
filename = filename & ".jpg"
MsgBox (filename)
Zahlen in Zeichenketten umwandeln
Eine häufige Anwendung ist die Umwandlung von Zahlen in Zeichenkette. Sie möchten zum Beispiel in einer Nachrichtenbox ein Berechnungsergebnis ausgeben - eine Zahl. Diese müssen Sie erst einmal mit Hilfe der Funktion CStr() in einen String umwandeln. Anschließend können Sie die beiden Zeichenketten wie oben beschrieben mit & aneinander hängen.
MsgBox("Ergebnis: " & CStr(zahl))
Zeichenketten in Zahlen umwandeln
Natürlich funktioniert auch der umgekehrte Weg: Sie können eine Zeichenkette mit Hilfe der Funktion CInt() in eine Zahl umwandeln. Dabei müssen Sie sich allerdings sicher sein, dass die umzuwandelnde String-Variable wirklich einen Wert enthält, der eine Zahl darstellt. Enthält der Wert alphanumerische Zeichen, erhalten Sie einen Laufzeitfehler.
Dim zahl as Integer
Dim zeichenkette as String
zeichenkette = 101
zahl = CInt(zeichenkette)
Position einer Zeichenkette innerhalb eines Strings ermitteln
Es soll herausgefunden werden, an welcher Stelle ein Teiltext beginnt. Dazu stellt VBA die Funktion InStr zur Verfügung.
Syntax: InStr([startindex, ] durchsuchString, suchString) as Long
Als ersten Parameter erwartet die Funktion den Index, an welcher die Suche starten soll. Wird kein Startindex angegeben, startet die Suche beim ersten Zeichen. Als nächstes muss der String übergeben werden, der durchsucht werden soll, anschließend derjenige, nach dem gesucht wird. Die Funktion gibt die Position des erstens Zeichens von suchString innerhalb von durchsuchString zurück oder 0, falls suchString nicht in durchsuchString vorhanden ist.
Im Beispiel steht in einer Rechnungsnummer das Jahr der Rechnung am Schluss durch einen Bindestrich abgetrennt, also z.B. 1111-2010. Wir möchten herausfinden, an welcher Stelle der Bindestrich steht, damit Rückschlüsse auf die Länge der Rechnungsnummer ohne die Jahreszahl gezogen werden können.
Dim laenge As Long
laenge = InStr(1, "1111-2010", "-") - 1
MsgBox laenge
Da der Bindestrich an fünfter Stelle steht, wir aber nur die Anzahl der Zeichen bis vor den Bindestrich haben möchten, wird von dem Ergebnis von InStr noch 1 abgezogen.
Einen Teilstring kopieren
Auch das folgende Problem ist häufig: Wir möchten gerne einen Teil einer Zeichenkette in eine andere String-Variable kopieren. Dazu dient die Funktion Mid.
Syntax: Mid(string, start[, laenge]) as String
Die Funktion möchte als erstes den Quellstring haben, aus dem die Zeichen herauskopiert werden sollen. Dann benötigt sie den Index des ersten zu kopierenden Zeichens innerhalb des Quellstrings. Schließlich müssen Sie noch die Länge des zu kopierenden Teilstrings angeben, also wie viele Zeichen kopiert werden sollen, einschließlich des Startzeichens.
Im Beispiel kopieren wir das Wort "Welt" in einen neuen String. Der erste Buchstabe steht an siebter Stelle, das Wort hat vier Buchstaben.
Sub midBeispiel()
Dim teilstring As String
teilstring = Mid("Hallo Welt!", 7, 4)
MsgBox teilstring
End Sub
Doch VBA stellt noch zwei weitere Funktionen zur Verfügung: Left() und Right(). Left() gibt eine bestimmte Anzahl Zeichen ab dem ersten Zeichen zurück und Right() gibt eine bestimmte Anzahl Zeichen ab dem letzten Zeichen zurück. Am besten sehen Sie das an dem folgenden Beispiel:
Dim HalloWelt As String
sHalloWelt = "Hallo Welt"
MsgBox (Left(sHalloWelt, 5))
MsgBox (Right(sHalloWelt, 4))
Die erste Nachrichtenbox gibt die ersten fünf Buchstaben der Variable sHalloWelt zurück, also den Text "Hallo". Die zweite Nachrichtenbox zeigt die letzten vier Buchstaben von sHalloWelt an, also "Welt".
Länge einer Zeichenkette bestimmen
Nützlich ist es, wenn man die Länge einer Zeichenkette bestimmen kann, gerade bei der Verwendung der obigen Funktionen. Dies geschieht mit Hilfe der Funktion Len.
Syntax: Len(zeichenkette) as Long
Len erwartet nur die Zeichenkette, deren Länge berechnet werden soll. Zurückgegeben wird - wie soll es anders sein - die berechnete Länge.
Sub lenBeispiel()
Dim laenge As Integer
laenge = Len("Hallo Welt!")
MsgBox "Länge: " & laenge
End Sub
Zeichen aus einer Zeichenkette löschen
Um Zeichen aus einer Zeichenkette zu löschen, müssen Sie mit Hilfe der Funktion Right() und Left() den Text vor und nach den Zeichen, die Sie entfernen möchten, in eine neue String-Variable übertragen. Im folgenden Beispiel soll der Text "doofe" entfernt werden. Dazu werden mit Hilfe von Left() die ersten fünf Zeichen (inklusive Leerzeichen) und mit Hilfe von Right() die letzten vier Zeichen der Variable sHalloWelt in die Variable sNeueWelt kopiert.
Dim sHalloWelt As String
Dim sNeueWelt As String
sHalloWelt = "Hallo doofe Welt"
sNeueWelt = Left(sHalloWelt, 6) & Right(sHalloWelt, 4)
MsgBox (sNeueWelt)
