VBA Tipp: Split-Funktion mit mehreren Trennzeichen

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Mit der VBA-internen Split()-Funktion kann ich eine Zeichenfolge (String) anhand nur eines Trennzeichens in einzelne Zeichenfolgen zerlegen, und die einzelnen Zeichenfolgen in ein Datenfeld (Array) einlesen. Ich möchte aber eine Zeichenfolge anhand mehrerer verschiedener Trennzeichen zerlegen.

Lösung

Das geht mit der folgenden Funktion, die in einem globalen Modul hinterlegt wird.

Argumente der Funktion:

  • Ausdruck: Zeichenfolgenausdruck, der untergeordnete Zeichenfolgen und Trennzeichen enthält
  • Trennzeichen: Ein oder mehrere Zeichen einer Zeichenfolge, mit der die Grenzen von untergeordneten Zeichenfolgen identifiziert werden.
  • LeereZeichenfolgen (Optional): True gibt an, dass auch leere Zeichenfolgen (Null-Strings) zurückgegeben werden. Der Standardwert ist False.
Public Function SplitE(ByVal Ausdruck As String, _
                       ByVal Trennzeichen As String, _
                       Optional LeereZeichenfolgen As Boolean) As Variant
 
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   Dim i               As Long
   Dim ErstesTrennZchn As String
 
   ErstesTrennZchn = Left$(Trennzeichen, 1)
 
   'Trennzeichen 2-n mit 1. Trennzeichen ersetzen
   For i = 2 To Len(Trennzeichen)
      Ausdruck = Replace(Ausdruck, Mid$(Trennzeichen, i, 1), ErstesTrennZchn)
   Next
 
   'Abweichung vom Verhalten von VBA.Split: 
   'False: Keine Nullstrings (leere Zeichenfolgen) zurückgeben
   If LeereZeichenfolgen = False Then
      Do While InStr(1, Ausdruck, ErstesTrennZchn & ErstesTrennZchn) > 0
         Ausdruck = Replace(Ausdruck, ErstesTrennZchn & ErstesTrennZchn, ErstesTrennZchn)
      Loop
   End If
 
   SplitE = Split(Ausdruck, ErstesTrennZchn)
 
End Function

Aufruf

Die Funktion wird analog der Split()-Funktion verwendet:

   Dim strArr()       As String
   Dim strText        As String
   Dim varTeilstring  As Variant
 
   strText = "Wort1-(  Wort2 )//Wort3"
 
 
   ' Schritt 1: Einzelwerte in Array einlesen
   ' Nach diesen Zeichen soll getrennt werden: "- ()/"
 
   ' Beispiel 1: Keine leeren Zeichenfolgen zurückgeben (Standard)
   strArr = SplitE(strText, "- ()/")
 
   ' Alternativ: Beispiel 2: Auch leere Zeichenfolgen zurückgeben (wie Split()-Funktion)
   strArr = SplitE(strText, "- ()/", True)
 
 
   ' Schritt 2: Array auslesen, Einzelwerte im Direktfenster anzeigen
   For Each varTeilstring In strArr
      Debug.Print varTeilstring
   Next

Weblinks