Lektionen/Werkzeugkasten

Strings verarbeiten

Einsteiger9 Min. Lesezeit

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: Trim entfernt nur normale Leerzeichen, keine Tabulatoren oder geschützten Leerzeichen (Chr(160), oft aus Web-Kopien). Die musst du vorher gezielt per Replace austauschen.

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, Mid holen Länge und Ausschnitte; Positionen zählen ab 1.
  • InStr/InStrRev suchen von vorn bzw. hinten, Replace ersetzt, Trim & Co. beschneiden.
  • Split und Join zerlegen und verbinden Strings über ein Array — die Basis jeder CSV-Verarbeitung.
  • Verkette immer mit &, nicht mit +, um Ärger mit Null und Zahlen zu vermeiden.
  • Die $-Varianten liefern direkt einen String und sind schneller, vertragen aber kein Null.
Nächste Lektion
Mit Datum & Zeit rechnen