Kaum eine Aufgabe kommt ohne Textverarbeitung aus: Namen aufteilen, Eingaben säubern, Dateinamen zusammenbauen, CSV-Zeilen zerlegen. VBA bringt dafür einen kompletten Satz an String-Funktionen mit. In dieser Lektion lernst du die wichtigsten kennen und baust am Ende ein kleines, praxisnahes Beispiel.
Länge und Ausschnitte: Len, Left, Right, Mid
Die Grundoperationen holen Teile aus einem String heraus:
Dim s As String
s = "Kundennummer: 4711"
Debug.Print Len(s) ' 18 – Anzahl Zeichen
Debug.Print Left(s, 12) ' "Kundennummer"
Debug.Print Right(s, 4) ' "4711"
Debug.Print Mid(s, 15, 4) ' "4711" – ab Position 15, 4 Zeichen
Debug.Print Mid(s, 15) ' "4711" – ohne Längenangabe bis zum Ende
VBA zählt Zeichenpositionen ab 1, nicht ab 0. Mid ist die flexibelste
Funktion: Startposition und optionale Länge.
Suchen: InStr und InStrRev
InStr sucht einen Teilstring und liefert die Position seines ersten Auftretens
— oder 0, wenn nichts gefunden wird. InStrRev sucht von hinten:
Dim pfad As String
pfad = "C:\Daten\Export\kunden.csv"
Debug.Print InStr(pfad, "\") ' 3 – erster Backslash
Debug.Print InStrRev(pfad, "\") ' 17 – letzter Backslash
Debug.Print InStr(pfad, "xml") ' 0 – nicht enthalten
' Dateinamen aus dem Pfad holen:
Debug.Print Mid(pfad, InStrRev(pfad, "\") + 1) ' "kunden.csv"
InStr kennt optional einen Startindex und einen Vergleichsmodus, z. B.
InStr(1, text, "abc", vbTextCompare) für Groß-/Kleinschreibung-unabhängige Suche.
Ersetzen und Beschneiden
Replace tauscht alle Vorkommen aus, Trim entfernt Leerzeichen an beiden
Enden (LTrim nur links, RTrim nur rechts):
Debug.Print Replace("2026;07;01", ";", "-") ' "2026-07-01"
Debug.Print Trim(" Hallo Welt ") ' "Hallo Welt"
Debug.Print LTrim(" links") ' "links"
Debug.Print RTrim("rechts ") ' "rechts"
Hinweis:
Trimentfernt nur normale Leerzeichen, keine Tabulatoren oder geschützten Leerzeichen (Chr(160), oft aus Web-Kopien). Die musst du vorher gezielt perReplaceaustauschen.
Groß- und Kleinschreibung: UCase, LCase
Debug.Print UCase("möller") ' "MÖLLER"
Debug.Print LCase("HALLO") ' "hallo"
Praktisch für den Vergleich: Wandelst du beide Seiten in LCase um, ist die
Schreibweise egal. Alternativ nimmst du gleich StrComp (siehe unten).
Zerlegen und Zusammenfügen: Split und Join
Split zerlegt einen String an einem Trennzeichen in ein Array, Join setzt
ein Array wieder zusammen. Das ist das Rückgrat jeder CSV-Verarbeitung:
Dim zeile As String, felder() As String
zeile = "Müller;Anna;Hamburg"
felder = Split(zeile, ";")
Debug.Print felder(0) ' "Müller"
Debug.Print felder(1) ' "Anna"
Debug.Print UBound(felder) ' 2 – höchster Index (0-basiert)
' Wieder zusammensetzen, diesmal mit Komma:
Debug.Print Join(felder, ", ") ' "Müller, Anna, Hamburg"
Das Array aus Split ist immer 0-basiert; mit UBound bekommst du den höchsten
Index.
Vergleichen mit StrComp
StrComp vergleicht zwei Strings und liefert -1, 0 oder 1. Mit
vbTextCompare ignoriert es die Groß-/Kleinschreibung:
Debug.Print StrComp("Apfel", "apfel", vbTextCompare) ' 0 – gleich
Debug.Print StrComp("Apfel", "Birne", vbBinaryCompare) ' -1 – kleiner
Verketten: & statt +
Strings hängst du mit & aneinander. Nimm nicht + dafür:
Dim vorname As String, nachname As String
vorname = "Anna": nachname = "Müller"
Debug.Print vorname & " " & nachname ' "Anna Müller"
Debug.Print "Anzahl: " & 42 ' "Anzahl: 42" – Zahl wird umgewandelt
Der Operator + funktioniert bei zwei Strings zwar auch, aber sobald ein Null oder
eine Zahl im Spiel ist, verhält er sich anders (Null-Fortpflanzung, Addition statt
Verkettung). & wandelt zuverlässig in Text um und macht aus Null einen leeren
String. Nimm im Zweifel immer &.
Format für Strings
Format bringt Werte in eine feste Textdarstellung — nützlich für Nummern mit
führenden Nullen oder aufbereitete Datumsangaben:
Debug.Print Format(7, "000") ' "007"
Debug.Print Format(1234.5, "#,##0.00") ' "1.234,50"
Debug.Print Format(Date, "yyyy-mm-dd") ' "2026-07-01"
Debug.Print Format("hallo", ">") ' "HALLO" – > erzwingt Großbuchstaben
Praxis: Namen zerlegen und bereinigen
Angenommen, in einem Importfeld steht " müller, anna " und du willst daraus
sauber getrennte, korrekt geschriebene Werte machen:
Public Sub NamenAufbereiten(ByVal roh As String)
Dim teile() As String
Dim nachname As String, vorname As String
' 1. Ränder säubern
roh = Trim(roh) ' "müller, anna"
' 2. Am Komma trennen
teile = Split(roh, ",")
nachname = Trim(teile(0)) ' "müller"
If UBound(teile) >= 1 Then
vorname = Trim(teile(1)) ' "anna"
End If
' 3. Ersten Buchstaben groß, Rest klein
nachname = UCase(Left(nachname, 1)) & LCase(Mid(nachname, 2))
vorname = UCase(Left(vorname, 1)) & LCase(Mid(vorname, 2))
Debug.Print vorname & " " & nachname ' "Anna Müller"
End Sub
Das Muster – säubern, trennen, normalisieren – trägt bei fast jeder Textaufbereitung.
Die $-Varianten kurz erwähnt
Viele String-Funktionen gibt es doppelt: Left/Left$, Mid/Mid$,
Trim/Trim$, UCase/UCase$. Die Versionen mit $ geben direkt einen
String zurück statt eines Variant und sind minimal schneller. Sie erwarten aber
echten Text — kommt ein Null hinein, lösen sie einen Fehler aus. In engen Schleifen
mit garantiert nicht-Null-Werten sind die $-Varianten die bessere Wahl:
Dim s As String
s = Left$("Hamburg", 3) ' "Ham" – liefert direkt String
Zusammengefasst
Len,Left,Right,Midholen Länge und Ausschnitte; Positionen zählen ab 1.InStr/InStrRevsuchen von vorn bzw. hinten,Replaceersetzt,Trim& Co. beschneiden.SplitundJoinzerlegen und verbinden Strings über ein Array — die Basis jeder CSV-Verarbeitung.- Verkette immer mit
&, nicht mit+, um Ärger mitNullund Zahlen zu vermeiden. - Die
$-Varianten liefern direkt einenStringund sind schneller, vertragen aber keinNull.