{"id":55000511,"date":"2026-08-01T00:00:00","date_gmt":"2026-10-18T15:07:05","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=511"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"VBA_Basics_Strings_und_Stringfunktionen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/","title":{"rendered":"VBA Basics: Strings und Stringfunktionen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/875c6e76b6ec4599b2390bab2f39f684\" width=\"1\" height=\"1\" alt=\"\"><b>Kaum eine VBA-Prozedur kommt ohne Zeichenketten aus. Wir zerlegen Dateinamen, setzen SQL-Anweisungen zusammen, bereinigen Importdaten oder formatieren Ausgaben &#8211; und greifen dabei st&auml;ndig zu <b>Left<\/b>, <b>Mid<\/b>, <b>InStr<\/b> und <b>Replace<\/b>. Trotzdem wurden diese Funktionen in unserer VBA-Reihe bisher nie vollst&auml;ndig vorgestellt. Das holen wir hier nach: zuerst eine kompakte &Uuml;bersicht aller Stringfunktionen, dann praxisnahe L&ouml;sungen f&uuml;r typische Aufgaben &#8211; vom CSV-Parsing &uuml;ber Pattern-Matching bis zur sicheren Zusammensetzung von SQL-Strings. Die VBA-Grundlagen setzen wir voraus; hier geht es um Techniken, die aus fragilen Einzeilern robuste L&ouml;sungen machen.<\/b><\/p>\n<h2>Alle Stringfunktionen auf einen Blick<\/h2>\n<p>VBA bietet rund 30 Funktionen und Operatoren f&uuml;r die Arbeit mit Zeichenketten. Die folgende Liste zeigt sie gruppiert nach Aufgabe. Die meisten existieren in zwei Varianten: ohne Dollarzeichen (Ergebnis <b>Variant<\/b>) und mit Dollarzeichen (Ergebnis <b>String<\/b>). Die <b>$<\/b>-Variante ist schneller und wirft bei <b>Null<\/b> einen Laufzeitfehler statt <b>Null<\/b> stillschweigend weiterzureichen. F&uuml;r produktiven Code empfehlen wir grunds&auml;tzlich die <b>$<\/b>-Form.<\/p>\n<p><b>Teilstrings extrahieren<\/b> &#8211; mit den folgenden Funktionen holen wir Teilzeichenketten von links, recht und auch aus der Mitte:<b> <\/b><\/p>\n<ul>\n<li><b>Left\/Left$<\/b>: liefert die ersten n Zeichen von links<\/li>\n<li><b>Right\/Right$<\/b>: liefert die letzten n Zeichen von rechts<\/li>\n<li><b>Mid\/Mid$<\/b>: liefert ab Position p optional n Zeichen; ohne n den gesamten Rest<\/li>\n<\/ul>\n<p><b>Suchen<\/b> &#8211; Du suchst die Position einer bestimmten Zeichenkette von vorn oder hinten? Hier sind die geeigneten Funktionen:<\/p>\n<ul>\n<li><b>InStr<\/b>: Position des ersten Vorkommens eines Suchstrings (von links)<\/li>\n<li><b>InStrRev<\/b>: Position des letzten Vorkommens (von rechts)<\/li>\n<\/ul>\n<p><b>Ersetzen<\/b> &#8211; auch das gelingt schnell mit einer VBA-Funktion:<\/p>\n<ul>\n<li><b>Replace<\/b>: ersetzt alle (oder n) Vorkommen eines Teilstrings<\/li>\n<\/ul>\n<p><b>Aufteilen und Zusammenf&uuml;gen<\/b> &#8211; diese beiden Funktionen trennen Texte an bestimmten Zeichen und schieben sie in ein Array und umgekehrt:<\/p>\n<ul>\n<li><b>Split<\/b>: zerlegt einen String an einem Trennzeichen in ein Array<\/li>\n<li><b>Join<\/b>: f&uuml;gt ein Array mit einem Trennzeichen zu einem String zusammen<\/li>\n<\/ul>\n<p><b>Bereinigen<\/b> &#8211; Leerzeichen vorn, hinten oder an beiden Seiten entfernen gelingt mit diesen Funktionen:<\/p>\n<ul>\n<li><b>Trim\/Trim$<\/b>: entfernt Leerzeichen am Anfang und Ende<\/li>\n<li><b>LTrim\/LTrim$<\/b>: entfernt Leerzeichen nur am Anfang<\/li>\n<li><b>RTrim\/RTrim$<\/b>: entfernt Leerzeichen nur am Ende<\/li>\n<\/ul>\n<p><b>Gro&szlig;-\/Kleinschreibung<\/b> &#8211; wer bequem zwischen beiden umwandeln m&ouml;chte, hat diese M&ouml;glichkeiten:<\/p>\n<ul>\n<li><b>UCase\/UCase$<\/b>: wandelt in Grossbuchstaben um<\/li>\n<li><b>LCase\/LCase$<\/b>: wandelt in Kleinbuchstaben um<\/li>\n<li><b>StrConv<\/b>: vielseitig: Gross, Klein, Proper Case, Unicode-Konvertierung<\/li>\n<\/ul>\n<p><b>Vergleichen und Analysieren<\/b> &#8211; dazu k&ouml;nnen wir die folgenden Funktionen nutzen:<\/p>\n<ul>\n<li><b>StrComp<\/b>: vergleicht zwei Strings mit w&auml;hlbarer Methode (bin&auml;r oder textuell); liefert -1, 0 oder 1<\/li>\n<li><b>Like<\/b>: Operator f&uuml;r Pattern-Matching mit Platzhaltern (<b>*<\/b>, <b>?<\/b>, <b>#<\/b>, <b>[&#8230;]<\/b>)<\/li>\n<\/ul>\n<p><b>L&auml;nge und Zeichencodes<\/b> &#8211; kein Problem mit diesen Funktionen:<\/p>\n<ul>\n<li><b>Len<\/b>: Anzahl der Zeichen (bei <b>Null<\/b>: liefert <b>Null<\/b>)<\/li>\n<li><b>Asc<\/b>: liefert den Zeichencode des ersten Zeichens<\/li>\n<li><b>Chr\/Chr$<\/b>: liefert das Zeichen zu einem Code<\/li>\n<\/ul>\n<p><b>Erzeugen und F&uuml;llen<\/b> &#8211; zum Erzeugen von beliebig vielen Zeichen in einer Zeichenkette:<\/p>\n<ul>\n<li><b>String\/String$<\/b>: wiederholt ein einzelnes Zeichen n-mal<\/li>\n<li><b>Space\/Space$<\/b>: erzeugt n Leerzeichen<\/li>\n<\/ul>\n<p><b>Formatieren<\/b> &#8211; nur eine Funktion, aber sehr vielseitig einsetzbar:<\/p>\n<ul>\n<li><b>Format\/Format$<\/b>: formatiert Zahlen, Datumsangaben und Strings nach einer Formatmaske<\/li>\n<\/ul>\n<p><b>Konvertieren<\/b> &#8211; f&uuml;r die folgenden Spezialf&auml;lle:<\/p>\n<ul>\n<li><b>CStr<\/b>: wandelt einen beliebigen Wert in einen String um<\/li>\n<li><b>Val<\/b>: liest eine Zahl vom Anfang eines Strings<\/li>\n<li><b>Str\/Str$<\/b>: wandelt eine Zahl in einen String (mit f&uuml;hrendem Leerzeichen)<\/li>\n<\/ul>\n<p><b>Verkettung<\/b> &#8211; mit unterschiedlicher Verarbeitung von <b>Null<\/b>:<\/p>\n<ul>\n<li><b>&#038;<\/b>: Verkettungsoperator; wandelt <b>Null<\/b> in Leerstring um<\/li>\n<li><b>+<\/b>: alternativer Operator; vererbt <b>Null<\/b> an das Ergebnis<\/li>\n<\/ul>\n<p><b>Sonstiges:<\/b><\/p>\n<ul>\n<li><b>StrReverse<\/b>: dreht die Zeichenfolge um<\/li>\n<li><b>Nz<\/b>: Access-spezifisch; ersetzt <b>Null<\/b> durch einen Vorgabewert<\/li>\n<\/ul>\n<h2>String, Variant und das Dollarzeichen<\/h2>\n<p>Warum gibt es die meisten Funktionen doppelt &#8211; einmal als <b>Left<\/b> und einmal als <b>Left$<\/b>? Der Grund ist einfach: Die Variante ohne Dollarzeichen gibt einen <b>Variant<\/b> zur&uuml;ck, die Variante mit Dollarzeichen einen <b>String<\/b>.<\/p>\n<p>Das klingt nach Erbsenz&auml;hlerei, hat aber eine handfeste Folge &#8211; die <b>$<\/b>-Variante ist schneller, weil keine Typumwandlung anf&auml;llt, und sie ist ehrlicher, weil sie bei einem <b>Null<\/b>-Wert einen Fehler ausl&ouml;st, statt ihn stillschweigend weiterzureichen.<\/p>\n<p>F&uuml;r Fortgeschrittene ergibt sich daraus eine klare Regel: Wenn die Eingabe garantiert kein <b>Null<\/b> enth&auml;lt (etwa bei <b>String<\/b>-Variablen oder bereits gepr&uuml;ften Werten), nehmen wir <b>Left$<\/b>, <b>Mid$<\/b>, <b>Trim$<\/b> und so weiter. Nur wenn wir bewusst mit <b>Null<\/b> aus Datenbankfeldern arbeiten, greifen wir zur <b>Variant<\/b>-Variante &#8211; und sichern uns vorher mit <b>Nz<\/b> ab.<\/p>\n<h2>Was Null mit Texten anstellt<\/h2>\n<p>Importdaten sind voller leerer Felder, und in Access heisst leer nun einmal <b>Null<\/b>. Das Verhalten ist t&uuml;ckisch: <b>Len(Null)<\/b> liefert nicht <b>0<\/b>, sondern selbst <b>Null<\/b>.<\/p>\n<p>Eine Pr&uuml;fung wie <b>If Len(varText) > 0 Then<\/b> ist damit wirkungslos &#8211; der Vergleich ergibt <b>Null<\/b>, und <b>If<\/b> behandelt das wie <b>False<\/b>. Noch gef&auml;hrlicher: Der Verkettungsoperator <b>&#038;<\/b> wandelt <b>Null<\/b> still in einen Leerstring um, w&auml;hrend <b>+<\/b> das gesamte Ergebnis zu <b>Null<\/b> macht.<\/p>\n<p>Die L&ouml;sung in Access ist die Funktion <b>Nz<\/b>. Sie ersetzt <b>Null<\/b> durch einen Vorgabewert. F&uuml;r unsere Zwecke lautet die Standard-Absicherung:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>strSicher<span style=\"color:blue;\"> As String<\/span>\r\nstrSicher = Nz(rst!Feldname, vbNullString)<\/pre>\n<p>Ab jetzt k&ouml;nnen wir gefahrlos mit den <b>$<\/b>-Funktionen arbeiten. vbNullString ist gleichbedeutend mit einer leeren Zeichenkette, wir k&ouml;nnten also auch nutzen:<\/p>\n<pre>strSicher = Nz(rst!Feldname, \"\")<\/pre>\n<h2>Zerlegen mit Left, Right und Mid<\/h2>\n<p>Die drei Klassiker schneiden Teilst&uuml;cke aus einer Zeichenkette heraus. <b>Left$(strText, 5)<\/b> liefert die ersten f&uuml;nf Zeichen, <b>Right$(strText, 5)<\/b> die letzten f&uuml;nf und <b>Mid$(strText, 3, 4)<\/b> vier Zeichen ab Position <b>3<\/b>. Zwei Details lohnen sich zu merken: Die Z&auml;hlung beginnt bei <b>1<\/b>, und das dritte Argument von <b>Mid<\/b> ist optional &#8211; l&auml;sst man es weg, bekommt man den gesamten Rest ab der Startposition.<\/p>\n<p>Ein typischer Praxisfall: Aus einem Dateinamen wie <b>Kunden_2026-07-15_Export.csv<\/b> wollen wir das Datum extrahieren. Daf&uuml;r kombinieren wir <b>InStrRev<\/b> mit <b>Mid$<\/b>.<\/p>\n<p>Die Funktion aus Listing 1 nutzt gleich mehrere Techniken auf einmal: <b>Split<\/b> zerlegt den Basisnamen an den Unterstrichen, der <b>Like<\/b>-Operator pr&uuml;ft jedes St&uuml;ck auf das ISO-Datumsmuster, und <b>Left$<\/b> sowie <b>Mid$<\/b> schneiden Jahr, Monat und Tag heraus.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>DateiDatumExtrahieren(ByVal strDateiname<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Variant<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>varTeile<span style=\"color:blue;\"> As Variant<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngIndex<span style=\"color:blue;\"> As Long<\/span>\r\n    DateiDatumExtrahieren = Null\r\n    varTeile = <span style=\"color:blue;\">Split<\/span>(DateiOhnePfad(strDateiname), \"_\")\r\n    For lngIndex = <span style=\"color:blue;\">LBound<\/span>(varTeile) To <span style=\"color:blue;\">UBound<\/span>(varTeile)\r\n        <span style=\"color:blue;\">If <\/span>varTeile(lngIndex) Like \"####-##-##\"<span style=\"color:blue;\"> Then<\/span>\r\n            DateiDatumExtrahieren = DateSerial(CLng(Left$(varTeile(lngIndex), 4)), _\r\n                CLng(Mid$(varTeile(lngIndex), 6, 2)), CLng(Mid$(varTeile(lngIndex), 9, 2)))\r\n            <span style=\"color:blue;\">Exit For<\/span>\r\n        <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">Next<\/span> lngIndex\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Datum aus einem Dateinamen extrahieren mit Split, Like und Mid$<\/span><\/b><\/p>\n<h2>Suchen mit InStr und InStrRev<\/h2>\n<p><b>InStr<\/b> liefert die Position, an der eine Zeichenfolge zum ersten Mal vorkommt, und <b>0<\/b>, wenn sie nicht vorkommt. Die Funktion kennt zwei Aufrufformen: Ohne Startposition heisst es <b>InStr(strText, strSuche)<\/b>, mit Startposition dagegen <b>InStr(lngStart, strText, strSuche)<\/b> &#8211; die Startposition rutscht also nach vorn und schiebt die anderen Argumente eine Stelle weiter.<\/p>\n<p>Wer das Vergleichsargument (<b>vbBinaryCompare<\/b> oder <b>vbTextCompare<\/b>) angeben will, muss zwingend die lange Form benutzen.<\/p>\n<p><b>InStrRev<\/b> sucht dieselbe Zeichenfolge von hinten. F&uuml;r Dateipfade ist das genau richtig, denn dort interessiert uns immer der letzte Backslash. Allerdings dreht <b>InStrRev<\/b> die Argumentreihenfolge wieder um &#8211; hier heisst es <b>InStrRev(strText, strSuche)<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>DateiOhnePfad( _\r\n        ByVal strPfad<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngPos<span style=\"color:blue;\"> As Long<\/span>\r\n    lngPos = <span style=\"color:blue;\">InStrRev<\/span>(strPfad, \"\\\")\r\n    <span style=\"color:blue;\">If <\/span>lngPos = 0<span style=\"color:blue;\"> Then<\/span>\r\n        DateiOhnePfad = strPfad\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        DateiOhnePfad = Mid$(strPfad, lngPos + 1)\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Die Funktion sucht den letzten Backslash und gibt alles danach zur&uuml;ck. Kommt kein Backslash vor, ist der gesamte String bereits der Dateiname.<\/p>\n<h2>Ersetzen mit Replace<\/h2>\n<p><b>Replace<\/b> ersetzt alle Vorkommen eines Teilstrings durch einen anderen. Die vollst&auml;ndige Signatur lautet <b>Replace(strText, strSuche, strErsatz, lngStart, lngAnzahl, lngVergleich)<\/b>.<\/p>\n<p>Die letzten drei Argumente sind optional. Allerdings hat <b>Replace<\/b> eine Eigenheit, die viele &uuml;bersehen: Gibt man <b>lngStart<\/b> an, liefert die Funktion nicht den vollst&auml;ndigen String zur&uuml;ck, sondern nur den Teil ab <b>lngStart<\/b>. Das &uuml;berrascht und ist selten gew&uuml;nscht.<\/p>\n<p>Ein klassischer Einsatz ist die Bereinigung von Sonderzeichen f&uuml;r SQL-Strings &#8211; einfache Anf&uuml;hrungszeichen m&uuml;ssen verdoppelt werden, damit sie keinen Syntaxfehler ausl&ouml;sen:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>SQLSafe(ByVal strWert<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n    SQLSafe = <span style=\"color:blue;\">Replace<\/span>(strWert, \"'\", \"''\")\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>So k&ouml;nnen wir gefahrlos schreiben: <b>strSQL = &#8220;WHERE Nachname = &#8216;&#8221; &#038; SQLSafe(strName) &#038; &#8220;&#8216;&#8221;<\/b><\/p>\n<h2>Aufteilen und Zusammenf&uuml;gen mit Split und Join<\/h2>\n<p><b>Split<\/b> zerlegt einen String an einem Trennzeichen und liefert ein nullbasiertes <b>Variant<\/b>-Array. <b>Join<\/b> macht das Gegenteil &#8211; es f&uuml;gt die Elemente eines Arrays mit einem Trennzeichen wieder zusammen. Zusammen bilden sie ein m&auml;chtiges Paar f&uuml;r Daten-Transformationen:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>EinLeerzeichen(ByVal strText<span style=\"color:blue;\"> As String<\/span>) _\r\n       <span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>varTeile<span style=\"color:blue;\"> As Variant<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngI<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngZiel<span style=\"color:blue;\"> As Long<\/span>\r\n    varTeile = <span style=\"color:blue;\">Split<\/span>(strText, \" \")\r\n    lngZiel = -1\r\n    For lngI = <span style=\"color:blue;\">LBound<\/span>(varTeile) To <span style=\"color:blue;\">UBound<\/span>(varTeile)\r\n        <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(varTeile(lngI)) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n            lngZiel = lngZiel + 1\r\n            varTeile(lngZiel) = varTeile(lngI)\r\n        <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">Next<\/span> lngI\r\n    <span style=\"color:blue;\">If <\/span>lngZiel &lt; 0<span style=\"color:blue;\"> Then<\/span>\r\n        EinLeerzeichen = vbNullString\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        ReDim Preserve varTeile(lngZiel)\r\n        EinLeerzeichen = Join(varTeile, \" \")\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Die Funktion aus zerlegt den String an Leerzeichen. Mehrfach-Leerzeichen erzeugen dabei leere Array-Elemente, die wir herausfiltern. Anschliessend f&uuml;gt <b>Join<\/b> die &uuml;brigen Teile mit genau einem Leerzeichen wieder zusammen.<\/p>\n<h2>Bereinigen mit Trim und Verwandten<\/h2>\n<p><b>Trim<\/b> entfernt Leerzeichen am Anfang und Ende. Allerdings ausschliesslich normale Leerzeichen (Code 32). Tabulatoren, Zeilenumbr&uuml;che und vor allem das gesch&uuml;tzte Leerzeichen (Code <b>160<\/b>) bleiben stehen.<\/p>\n<p>Letzteres landet immer dann in den Daten, wenn jemand Text aus einer Webseite kopiert hat. Optisch ist es von einem gew&ouml;hnlichen Leerzeichen nicht zu unterscheiden &#8211; ein Vergleich schl&auml;gt trotzdem fehl.<\/p>\n<p>Wir brauchen also eine Funktion, die gr&uuml;ndlicher aufr&auml;umt:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>TrimPlus(ByVal strText<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n    strText = <span style=\"color:blue;\">Replace<\/span>(strText, Chr$(160), \" \")\r\n    strText = <span style=\"color:blue;\">Replace<\/span>(strText, vbTab, \" \")\r\n    strText = <span style=\"color:blue;\">Replace<\/span>(strText, <span style=\"color:blue;\">vbCr<\/span>, \" \")\r\n    strText = <span style=\"color:blue;\">Replace<\/span>(strText, <span style=\"color:blue;\">vbLf<\/span>, \" \")\r\n    <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">InStr<\/span>(strText, \"  \") &gt; 0\r\n        strText = <span style=\"color:blue;\">Replace<\/span>(strText, \"  \", \" \")\r\n    <span style=\"color:blue;\">Loop<\/span>\r\n    TrimPlus = Trim$(strText)\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<h2>Pattern-Matching mit dem Like-Operator<\/h2>\n<p>Der <b>Like<\/b>-Operator ist VBAs eingebauter Pattern-Matcher. Er ist kein vollwertiger regul&auml;rer Ausdruck, deckt aber erstaunlich viele Pr&uuml;fungen ab.<\/p>\n<p>Die Platzhalter:<\/p>\n<ul>\n<li><b>*<\/b> &#8211; beliebig viele beliebige Zeichen (auch null)<\/li>\n<li><b>?<\/b> &#8211; genau ein beliebiges Zeichen<\/li>\n<li><b>#<\/b> &#8211; genau eine Ziffer (0-9)<\/li>\n<li><b>[abc]<\/b> &#8211; genau eines der aufgef&uuml;hrten Zeichen<\/li>\n<li><b>[!abc]<\/b> &#8211; jedes Zeichen ausser den aufgef&uuml;hrten<\/li>\n<li><b>[a-z]<\/b> &#8211; ein Zeichen im angegebenen Bereich<\/li>\n<\/ul>\n<p>Ob <b>Like<\/b> Gross- und Kleinschreibung unterscheidet, h&auml;ngt von <b>Option Compare<\/b> ab. In Access-Modulen gilt standardm&auml;ssig <b>Option Compare Database<\/b> &#8211; und damit keine Unterscheidung.<\/p>\n<p>Wer bin&auml;r vergleichen will, muss das Modul auf <b>Option Compare Binary<\/b> umstellen.<\/p>\n<p>Ein Praxisbeispiel: Wir pr&uuml;fen, ob ein String eine g&uuml;ltige deutsche PLZ ist (f&uuml;nf Ziffern):<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>IstPLZ(ByVal strWert<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n    IstPLZ = (strWert Like \"#####\")\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Und wir schauen uns noch ein komplexeres Muster an. Hier wollen wir eine E-Mail-Adresse grob pr&uuml;fen. Dabei untersuchen wir, ob mindestens ein Zeichen vor und nach dem <b>@<\/b> und mindestens ein Punkt in der Domain vorkommt:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>IstEmailGrob(ByVal strWert<span style=\"color:blue;\"> As String<\/span>) _\r\n       <span style=\"color:blue;\"> As Boolean<\/span>\r\n    IstEmailGrob = (strWert Like \"?*@?*.?*\")\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<h2>Pr&auml;zise Vergleiche mit StrComp<\/h2>\n<p>Der Gleichheitsoperator <b>=<\/b> in VBA vergleicht Strings abh&auml;ngig von <b>Option Compare<\/b>. Das ist in Access-Modulen problematisch, weil dort <b>Option Compare Database<\/b> gilt und damit Gross-\/Kleinschreibung ignoriert wird.<\/p>\n<p><b>StrComp<\/b> bietet einen Ausweg: <b>StrComp(strA, strB, vbBinaryCompare)<\/b> vergleicht immer zeichengenau, unabh&auml;ngig von der Moduleinstellung.<\/p>\n<p>Die Funktion liefert <b>-1<\/b> (erster String kleiner), <b>0<\/b> (gleich) oder <b>1<\/b> (erster String gr&ouml;sser). F&uuml;r eine einfache Gleichheitspr&uuml;fung schreiben wir:<\/p>\n<pre><span style=\"color:blue;\">If <\/span>StrComp(strEingabe, \"Admin\", vbBinaryCompare) = 0<span style=\"color:blue;\"> Then<\/span>\r\n    ' Exakte Uebereinstimmung inkl. Gross\/Klein\r\n<span style=\"color:blue;\">End If<\/span><\/pre>\n<h2>Formatieren mit Format$<\/h2>\n<p>Die Funktion <b>Format$<\/b> formatiert Zahlen, Datumsangaben und Strings nach einer Formatmaske. F&uuml;r Strings ist sie weniger bekannt, aber durchaus n&uuml;tzlich &#8211; etwa um Postleitzahlen auf f&uuml;nf Stellen mit f&uuml;hrenden Nullen aufzuf&uuml;llen:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>PLZFormatieren(ByVal varPLZ<span style=\"color:blue;\"> As Variant<\/span>) _\r\n       <span style=\"color:blue;\"> As String<\/span>\r\n    PLZFormatieren = Format$(Nz(varPLZ, \"\"), \"00000\")\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Die Maske <b>&#8220;00000&#8221;<\/b> sorgt daf&uuml;r, dass aus <b>1067<\/b> die PLZ <b>01067<\/b> wird. Das ist der Grund, warum PLZ-Felder in der Datenbank als Textfeld angelegt sein sollten &#8211; eine Zahl verliert die f&uuml;hrende Null unwiderruflich.<\/p>\n<h2>Praxisl&ouml;sung: CSV-Zeilen robust parsen<\/h2>\n<p>Die Funktion <b>Split<\/b> zerlegt einen String an einem Trennzeichen. F&uuml;r einfache CSV-Daten reicht das. Sobald aber das Trennzeichen innerhalb von Anf&uuml;hrungszeichen vorkommt &#8211; etwa ein Semikolon in einer Adresse &#8211; versagt <b>Split<\/b>. Wir brauchen einen Parser, der Anf&uuml;hrungszeichen respektiert.<\/p>\n<p>Die Funktion aus Listing 2 geht zeichenweise durch die Zeile. Ein Anf&uuml;hrungszeichen schaltet den <b>blnInQuote<\/b>-Modus um &#8211; solange wir darin sind, wird das Trennzeichen als normales Zeichen behandelt.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>CSV<span style=\"color:blue;\">Split<\/span>(ByVal strZeile<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> ByVal strTrenner<span style=\"color:blue;\"> As String<\/span> = \";\")<span style=\"color:blue;\"> As Variant<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>colFelder<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Collection\r\n    <span style=\"color:blue;\">Dim <\/span>lngPos<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngLen<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strFeld<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>blnInQuote<span style=\"color:blue;\"> As Boolean<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strZeichen<span style=\"color:blue;\"> As String<\/span>\r\n    lng<span style=\"color:blue;\">Len<\/span> = <span style=\"color:blue;\">Len<\/span>(strZeile)\r\n    strFeld = vbNullString\r\n    blnInQuote = <span style=\"color:blue;\">False<\/span>\r\n    For lngPos = 1 To lngLen\r\n        strZeichen = Mid$(strZeile, lngPos, 1)\r\n        <span style=\"color:blue;\">If <\/span>strZeichen = \"\"\"\"<span style=\"color:blue;\"> Then<\/span>\r\n            blnInQuote = <span style=\"color:blue;\">Not<\/span> blnInQuote\r\n        <span style=\"color:blue;\">Else<\/span>If strZeichen = strTrenner And <span style=\"color:blue;\">Not<\/span> blnInQuote Then\r\n            colFelder.Add strFeld\r\n            strFeld = vbNullString\r\n        <span style=\"color:blue;\">Else<\/span>\r\n            strFeld = strFeld & strZeichen\r\n        <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">Next<\/span> lngPos\r\n    colFelder.Add strFeld\r\n    <span style=\"color:blue;\">Dim <\/span>varResult()<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngI<span style=\"color:blue;\"> As Long<\/span>\r\n    ReDim varResult(0 To colFelder.Count - 1)\r\n    For lngI = 1 To colFelder.Count\r\n        varResult(lngI - 1) = colFelder(lngI)\r\n    <span style=\"color:blue;\">Next<\/span> lngI\r\n    CSV<span style=\"color:blue;\">Split<\/span> = varResult\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: CSV-Parser, der Anf&uuml;hrungszeichen respektiert<\/span><\/b><\/p>\n<p>Das Ergebnis ist ein Array, das sich genauso verwenden l&auml;sst wie das von <b>Split<\/b>.<\/p>\n<h2>Praxis: Namen in Vor- und Nachname trennen<\/h2>\n<p>Ein h&auml;ufiger Importfall: Der Name liegt als <b>&#8220;Nachname, Vorname&#8221;<\/b> vor. Die Zerlegung nutzt <b>InStr<\/b> und <b>Mid$<\/b>.<\/p>\n<p>Die Prozedur aus Listing 3 verwendet <b>ByRef<\/b>-Parameter, damit beide Ergebnisse in einem Aufruf zur&uuml;ckgegeben werden. Bemerkenswert: <b>Trim$<\/b> r&auml;umt gleich die Leerzeichen auf, die nach dem Komma stehen.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>NameZerlegen(ByVal strGesamt<span style=\"color:blue;\"> As String<\/span>, ByRef strVorname<span style=\"color:blue;\"> As String<\/span>, ByRef strNachname<span style=\"color:blue;\"> As String<\/span>)\r\n    <span style=\"color:blue;\">Dim <\/span>lngKomma<span style=\"color:blue;\"> As Long<\/span>\r\n    strGesamt = Trim$(strGesamt)\r\n    lngKomma = <span style=\"color:blue;\">InStr<\/span>(strGesamt, \",\")\r\n    <span style=\"color:blue;\">If <\/span>lngKomma = 0<span style=\"color:blue;\"> Then<\/span>\r\n        strNachname = strGesamt\r\n        strVorname = vbNullString\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        strNachname = Trim$(Left$(strGesamt, lngKomma - 1))\r\n        strVorname = Trim$(Mid$(strGesamt, lngKomma + 1))\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Vor- und Nachname trennen mit InStr und Mid$<\/span><\/b><\/p>\n<h2>Suchnamen normalisieren<\/h2>\n<p>F&uuml;r Suchfelder in Datenbanken ist es oft sinnvoll, einen normalisierten Suchnamen zu erzeugen: Kleinbuchstaben, ohne Umlaute, ohne Sonderzeichen. Hier kombinieren wir mehrere Funktionen:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>SuchName(ByVal strName<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strResult<span style=\"color:blue;\"> As String<\/span>\r\n    strResult = LCase$(strName)\r\n    strResult = <span style=\"color:blue;\">Replace<\/span>(strResult, Chr$(228), \"ae\")\r\n    strResult = <span style=\"color:blue;\">Replace<\/span>(strResult, Chr$(246), \"oe\")\r\n    strResult = <span style=\"color:blue;\">Replace<\/span>(strResult, Chr$(252), \"ue\")\r\n    strResult = <span style=\"color:blue;\">Replace<\/span>(strResult, Chr$(223), \"ss\")\r\n    ' Bindestriche und Apostrophe entfernen\r\n    strResult = <span style=\"color:blue;\">Replace<\/span>(strResult, \"-\", vbNullString)\r\n    strResult = <span style=\"color:blue;\">Replace<\/span>(strResult, \"'\", vbNullString)\r\n    ' Mehrfach-Leerzeichen und Trim\r\n    SuchName = EinLeerzeichen(strResult)\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Aus <b>&#8220;M&uuml;ller-Th&uuml;rgau&#8221;<\/b> wird so <b>&#8220;muellerthuergau&#8221;<\/b>, und aus <b>&#8220;O&#8217;Brien&#8221;<\/b> wird <b>&#8220;obrien&#8221;<\/b>. Der normalisierte Name eignet sich als Suchindex &#8211; Tippfehler bei Umlauten oder Schreibweisen fallen damit nicht mehr ins Gewicht.<\/p>\n<h2>StrReverse und andere Hilfsfunktionen<\/h2>\n<p><b>StrReverse<\/b> dreht einen String um. Das klingt nach Spielerei, hat aber einen handfesten Nutzen: Zusammen mit <b>InStr<\/b> simuliert es eine <b>InStrRev<\/b>-Variante, die es in &auml;lteren VBA-Versionen nicht gab.<\/p>\n<p>Heute brauchen wir diesen Trick nicht mehr, aber <b>StrReverse<\/b> taugt f&uuml;r Palindrom-Pr&uuml;fungen oder um einen String zeichenweise von hinten zu durchlaufen, ohne mit Index-Arithmetik zu jonglieren.<\/p>\n<p>Ebenfalls n&uuml;tzlich: <b>String$(10, &#8220;-&#8220;)<\/b> erzeugt zehn Bindestriche am St&uuml;ck &#8211; praktisch f&uuml;r Trennlinien in der Debug-Ausgabe. Und <b>Space$(n)<\/b> erzeugt n Leerzeichen, was beim Formatieren von Textausgaben hilft.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>VBAs Stringfunktionen sind kein Hexenwerk, aber ihre Details entscheiden dar&uuml;ber, ob Code robust oder fragil ist.<\/p>\n<p>Die wichtigsten Lektionen: Die <b>$<\/b>-Varianten bevorzugen, <b>Null<\/b> immer vorher mit <b>Nz<\/b> absichern, <b>InStr<\/b> und <b>InStrRev<\/b> f&uuml;r die Positionssuche, <b>Split<\/b>\/<b>Join<\/b> als Paar f&uuml;r Transformationen, <b>Like<\/b> f&uuml;r einfache Muster und <b>Replace<\/b> f&uuml;r Massenersetzen. Mit der Funktion <b>StrComp<\/b> umgehen wir die Abh&auml;ngigkeit von <b>Option Compare<\/b>.<\/p>\n<p>Wer nach diesem Artikel tiefer einsteigen m&ouml;chte: Der Beitrag <b>Regul&auml;re Ausdr&uuml;cke in VBA: Die neue RegExp-Klasse<\/b> (<b>www.vbentwickler.de\/508<\/b>) zeigt, was jenseits des <b>Like<\/b>-Operators m&ouml;glich ist. Und der Artikel <b>Mit JSON arbeiten<\/b> (<b>www.vbentwickler.de\/361<\/b>) demonstriert, wie sich die hier gezeigten String-Techniken f&uuml;r das Parsen strukturierter Textformate einsetzen lassen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>VBABasics_StringsUndStringfunktionen.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/0B984DFF-6D25-41A3-8EAA-DFA267548A34\/vbe_511.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kaum eine VBA-Prozedur kommt ohne Zeichenketten aus. Wir zerlegen Dateinamen, setzen SQL-Anweisungen zusammen, bereinigen Importdaten oder formatieren Ausgaben &#8211; und greifen dabei st&auml;ndig zu Left, Mid, InStr und Replace. Trotzdem wurden diese Funktionen in unserer VBA-Reihe bisher nie vollst&auml;ndig vorgestellt. Das holen wir hier nach: zuerst eine kompakte &Uuml;bersicht aller Stringfunktionen, dann praxisnahe L&ouml;sungen f&uuml;r typische Aufgaben &#8211; vom CSV-Parsing &uuml;ber Pattern-Matching bis zur sicheren Zusammensetzung von SQL-Strings. Die VBA-Grundlagen setzen wir voraus; hier geht es um Techniken, die aus fragilen Einzeilern robuste L&ouml;sungen machen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662026,66042026,44000016],"tags":[],"yst_prominent_words":[],"class_list":["post-55000511","post","type-post","status-publish","format-standard","hentry","category-662026","category-66042026","category-VBGrundlagen"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"Kaum eine VBA-Prozedur kommt ohne Zeichenketten aus. Wir zerlegen Dateinamen, setzen SQL-Anweisungen zusammen, bereinigen Importdaten oder formatieren Ausgaben - und greifen dabei st\u00e4ndig zu Left, Mid, InStr und Replace. Trotzdem wurden diese Funktionen in unserer VBA-Reihe bisher nie vollst\u00e4ndig vorgestellt. Das holen wir hier nach: zuerst eine kompakte \u00dcbersicht aller Stringfunktionen, dann praxisnahe L\u00f6sungen f\u00fcr typische Aufgaben - vom CSV-Parsing \u00fcber Pattern-Matching bis zur sicheren Zusammensetzung von SQL-Strings. Die VBA-Grundlagen setzen wir voraus; hier geht es um Techniken, die aus fragilen Einzeilern robuste L\u00f6sungen machen.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Andr\u00e9 Minhorst\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Visual Basic Entwickler - Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"VBA Basics: Strings und Stringfunktionen - Visual Basic Entwickler\" \/>\n\t\t<meta property=\"og:description\" content=\"Kaum eine VBA-Prozedur kommt ohne Zeichenketten aus. Wir zerlegen Dateinamen, setzen SQL-Anweisungen zusammen, bereinigen Importdaten oder formatieren Ausgaben - und greifen dabei st\u00e4ndig zu Left, Mid, InStr und Replace. Trotzdem wurden diese Funktionen in unserer VBA-Reihe bisher nie vollst\u00e4ndig vorgestellt. Das holen wir hier nach: zuerst eine kompakte \u00dcbersicht aller Stringfunktionen, dann praxisnahe L\u00f6sungen f\u00fcr typische Aufgaben - vom CSV-Parsing \u00fcber Pattern-Matching bis zur sicheren Zusammensetzung von SQL-Strings. Die VBA-Grundlagen setzen wir voraus; hier geht es um Techniken, die aus fragilen Einzeilern robuste L\u00f6sungen machen.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-18T15:07:05+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"-001-11-30T00:00:00+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"VBA Basics: Strings und Stringfunktionen - Visual Basic Entwickler\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Kaum eine VBA-Prozedur kommt ohne Zeichenketten aus. Wir zerlegen Dateinamen, setzen SQL-Anweisungen zusammen, bereinigen Importdaten oder formatieren Ausgaben - und greifen dabei st\u00e4ndig zu Left, Mid, InStr und Replace. Trotzdem wurden diese Funktionen in unserer VBA-Reihe bisher nie vollst\u00e4ndig vorgestellt. Das holen wir hier nach: zuerst eine kompakte \u00dcbersicht aller Stringfunktionen, dann praxisnahe L\u00f6sungen f\u00fcr typische Aufgaben - vom CSV-Parsing \u00fcber Pattern-Matching bis zur sicheren Zusammensetzung von SQL-Strings. Die VBA-Grundlagen setzen wir voraus; hier geht es um Techniken, die aus fragilen Einzeilern robuste L\u00f6sungen machen.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/#blogposting\",\"name\":\"VBA Basics: Strings und Stringfunktionen - Visual Basic Entwickler\",\"headline\":\"VBA Basics: Strings und Stringfunktionen\",\"author\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/875c6e76b6ec4599b2390bab2f39f684\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/#articleImage\"},\"datePublished\":\"2026-08-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"inLanguage\":\"de-DE\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/#webpage\"},\"articleSection\":\"2026, 4\\\/2026, VB-Grundlagen\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/#listItem\",\"name\":\"2026\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/#listItem\",\"position\":2,\"name\":\"2026\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/4\\\/2026\\\/#listItem\",\"name\":\"4\\\/2026\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/4\\\/2026\\\/#listItem\",\"position\":3,\"name\":\"4\\\/2026\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/4\\\/2026\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/#listItem\",\"name\":\"VBA Basics: Strings und Stringfunktionen\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/#listItem\",\"name\":\"2026\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/#listItem\",\"position\":4,\"name\":\"VBA Basics: Strings und Stringfunktionen\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/4\\\/2026\\\/#listItem\",\"name\":\"4\\\/2026\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\",\"name\":\"Datenbankentwickler\",\"description\":\"Das Magazin f\\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/cropped-header_vbe-1.png\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/#organizationLogo\",\"width\":664,\"height\":225},\"image\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Andr\\u00e9 Minhorst\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/#webpage\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/\",\"name\":\"VBA Basics: Strings und Stringfunktionen - Visual Basic Entwickler\",\"description\":\"Kaum eine VBA-Prozedur kommt ohne Zeichenketten aus. Wir zerlegen Dateinamen, setzen SQL-Anweisungen zusammen, bereinigen Importdaten oder formatieren Ausgaben - und greifen dabei st\\u00e4ndig zu Left, Mid, InStr und Replace. Trotzdem wurden diese Funktionen in unserer VBA-Reihe bisher nie vollst\\u00e4ndig vorgestellt. Das holen wir hier nach: zuerst eine kompakte \\u00dcbersicht aller Stringfunktionen, dann praxisnahe L\\u00f6sungen f\\u00fcr typische Aufgaben - vom CSV-Parsing \\u00fcber Pattern-Matching bis zur sicheren Zusammensetzung von SQL-Strings. Die VBA-Grundlagen setzen wir voraus; hier geht es um Techniken, die aus fragilen Einzeilern robuste L\\u00f6sungen machen.\",\"inLanguage\":\"de-DE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/VBA_Basics_Strings_und_Stringfunktionen\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"datePublished\":\"2026-08-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#website\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"name\":\"Datenbankentwickler\",\"description\":\"Das Magazin f\\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\",\"inLanguage\":\"de-DE\",\"publisher\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"VBA Basics: Strings und Stringfunktionen - Visual Basic Entwickler","description":"Kaum eine VBA-Prozedur kommt ohne Zeichenketten aus. Wir zerlegen Dateinamen, setzen SQL-Anweisungen zusammen, bereinigen Importdaten oder formatieren Ausgaben - und greifen dabei st\u00e4ndig zu Left, Mid, InStr und Replace. Trotzdem wurden diese Funktionen in unserer VBA-Reihe bisher nie vollst\u00e4ndig vorgestellt. Das holen wir hier nach: zuerst eine kompakte \u00dcbersicht aller Stringfunktionen, dann praxisnahe L\u00f6sungen f\u00fcr typische Aufgaben - vom CSV-Parsing \u00fcber Pattern-Matching bis zur sicheren Zusammensetzung von SQL-Strings. Die VBA-Grundlagen setzen wir voraus; hier geht es um Techniken, die aus fragilen Einzeilern robuste L\u00f6sungen machen.","canonical_url":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/#blogposting","name":"VBA Basics: Strings und Stringfunktionen - Visual Basic Entwickler","headline":"VBA Basics: Strings und Stringfunktionen","author":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"publisher":{"@id":"https:\/\/vbentwickler.de\/#organization"},"image":{"@type":"ImageObject","url":"http:\/\/vg08.met.vgwort.de\/na\/875c6e76b6ec4599b2390bab2f39f684","@id":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/#articleImage"},"datePublished":"2026-08-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00","inLanguage":"de-DE","mainEntityOfPage":{"@id":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/#webpage"},"isPartOf":{"@id":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/#webpage"},"articleSection":"2026, 4\/2026, VB-Grundlagen"},{"@type":"BreadcrumbList","@id":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/#listItem","position":1,"name":"Home","item":"https:\/\/vbentwickler.de\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/#listItem","name":"2026"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/#listItem","position":2,"name":"2026","item":"https:\/\/vbentwickler.de\/category\/2026\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/4\/2026\/#listItem","name":"4\/2026"},"previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/4\/2026\/#listItem","position":3,"name":"4\/2026","item":"https:\/\/vbentwickler.de\/category\/2026\/4\/2026\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/#listItem","name":"VBA Basics: Strings und Stringfunktionen"},"previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/#listItem","name":"2026"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/#listItem","position":4,"name":"VBA Basics: Strings und Stringfunktionen","previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/4\/2026\/#listItem","name":"4\/2026"}}]},{"@type":"Organization","@id":"https:\/\/vbentwickler.de\/#organization","name":"Datenbankentwickler","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","url":"https:\/\/vbentwickler.de\/","logo":{"@type":"ImageObject","url":"https:\/\/vbentwickler.de\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","@id":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/#organizationLogo","width":664,"height":225},"image":{"@id":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author","url":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","@id":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","width":96,"height":96,"caption":"Andr\u00e9 Minhorst"}},{"@type":"WebPage","@id":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/#webpage","url":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/","name":"VBA Basics: Strings und Stringfunktionen - Visual Basic Entwickler","description":"Kaum eine VBA-Prozedur kommt ohne Zeichenketten aus. Wir zerlegen Dateinamen, setzen SQL-Anweisungen zusammen, bereinigen Importdaten oder formatieren Ausgaben - und greifen dabei st\u00e4ndig zu Left, Mid, InStr und Replace. Trotzdem wurden diese Funktionen in unserer VBA-Reihe bisher nie vollst\u00e4ndig vorgestellt. Das holen wir hier nach: zuerst eine kompakte \u00dcbersicht aller Stringfunktionen, dann praxisnahe L\u00f6sungen f\u00fcr typische Aufgaben - vom CSV-Parsing \u00fcber Pattern-Matching bis zur sicheren Zusammensetzung von SQL-Strings. Die VBA-Grundlagen setzen wir voraus; hier geht es um Techniken, die aus fragilen Einzeilern robuste L\u00f6sungen machen.","inLanguage":"de-DE","isPartOf":{"@id":"https:\/\/vbentwickler.de\/#website"},"breadcrumb":{"@id":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/#breadcrumblist"},"author":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"creator":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"datePublished":"2026-08-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00"},{"@type":"WebSite","@id":"https:\/\/vbentwickler.de\/#website","url":"https:\/\/vbentwickler.de\/","name":"Datenbankentwickler","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","inLanguage":"de-DE","publisher":{"@id":"https:\/\/vbentwickler.de\/#organization"}}]},"og:locale":"de_DE","og:site_name":"Visual Basic Entwickler - Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","og:type":"article","og:title":"VBA Basics: Strings und Stringfunktionen - Visual Basic Entwickler","og:description":"Kaum eine VBA-Prozedur kommt ohne Zeichenketten aus. Wir zerlegen Dateinamen, setzen SQL-Anweisungen zusammen, bereinigen Importdaten oder formatieren Ausgaben - und greifen dabei st\u00e4ndig zu Left, Mid, InStr und Replace. Trotzdem wurden diese Funktionen in unserer VBA-Reihe bisher nie vollst\u00e4ndig vorgestellt. Das holen wir hier nach: zuerst eine kompakte \u00dcbersicht aller Stringfunktionen, dann praxisnahe L\u00f6sungen f\u00fcr typische Aufgaben - vom CSV-Parsing \u00fcber Pattern-Matching bis zur sicheren Zusammensetzung von SQL-Strings. Die VBA-Grundlagen setzen wir voraus; hier geht es um Techniken, die aus fragilen Einzeilern robuste L\u00f6sungen machen.","og:url":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/","og:image":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","og:image:secure_url":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","article:published_time":"2026-10-18T15:07:05+00:00","article:modified_time":"-001-11-30T00:00:00+00:00","twitter:card":"summary_large_image","twitter:title":"VBA Basics: Strings und Stringfunktionen - Visual Basic Entwickler","twitter:description":"Kaum eine VBA-Prozedur kommt ohne Zeichenketten aus. Wir zerlegen Dateinamen, setzen SQL-Anweisungen zusammen, bereinigen Importdaten oder formatieren Ausgaben - und greifen dabei st\u00e4ndig zu Left, Mid, InStr und Replace. Trotzdem wurden diese Funktionen in unserer VBA-Reihe bisher nie vollst\u00e4ndig vorgestellt. Das holen wir hier nach: zuerst eine kompakte \u00dcbersicht aller Stringfunktionen, dann praxisnahe L\u00f6sungen f\u00fcr typische Aufgaben - vom CSV-Parsing \u00fcber Pattern-Matching bis zur sicheren Zusammensetzung von SQL-Strings. Die VBA-Grundlagen setzen wir voraus; hier geht es um Techniken, die aus fragilen Einzeilern robuste L\u00f6sungen machen.","twitter:image":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png"},"aioseo_meta_data":{"post_id":"55000511","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2026-10-18 14:16:31","updated":"2026-10-18 14:16:31","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/category\/2026\/\" title=\"2026\">2026<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/category\/2026\/4\/2026\/\" title=\"4\/2026\">4\/2026<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tVBA Basics: Strings und Stringfunktionen\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/vbentwickler.de\/"},{"label":"2026","link":"https:\/\/vbentwickler.de\/category\/2026\/"},{"label":"4\/2026","link":"https:\/\/vbentwickler.de\/category\/2026\/4\/2026\/"},{"label":"VBA Basics: Strings und Stringfunktionen","link":"https:\/\/vbentwickler.de\/VBA_Basics_Strings_und_Stringfunktionen\/"}],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000511"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000511\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000511"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}