Start Hilfe und Support Microsoft Office EXCEL 2013 VBA: Zeichenkette/String in Bestandteile zerlegen

EXCEL 2013 VBA: Zeichenkette/String in Bestandteile zerlegen

E-Mail PDF

Eine durch Separatoren/Trennzeichen strukturierte Zeichenkette/String in einzelne Elemente zerlegen

Aufgabenstellung

In EXCEL kennt man die Funktion "Text in Spalten", die es erlaubt, Inhalte, die sich in einer Zelle befinden und über Trennzeichen verfügen, aufzuspalten in die Anzahl an Elementen (und damit Spalten), die die Zeichenkette der Ursprungszelle enthält. Excel bietet im Standardfunktionsumfang die Funktion Split an. Diese Funktion wird hier nachempfunden. Dabei war es das Ziel, das objektorientiert zu tun, oder anders gesagt, eine Klasse zu erzeugen, die die Aufgabe der Aufteilung des Strings in einzelne Elemente übernimmt. Ein wesentlicher Bestandteil der Klasse ist dabei die Collection, die hier zum Einsatz kommt.

Der Vorhandene Programmcode kann als Grundgerüst dienen, um seine eigenen Anforderungen mit die die Klasse CStringZerlegen mit aufzunehmen. Gerade wenn man mit Schnittstellen zu tun hat, die im ASCII-Format vorliegen (ein immer noch sehr verbreitetes Fromat als Schnittstelle), ist man oft darauf angewiesen, Umformungen oder Ersetzungen bei den gelieferten Strings vorzunehmen, um soche Funktionalitäten lasst sich die Klasse CStringZerlegen einfach erweitern.

Das folgende Beispiel bietet die Möglichkeit, einen String/eine Zeichenkette, die z.B. durch ein Semikolon getrennt ist, in Elemente zu trennen und dann strukturiert auf die einzelnen Elemente zuzugreifen. Gelöst wurde das Problem mit einer Collection, in der die Liste an String-Elementen eingefügt wird. Auf die einzelnen Elemente kann man dann per Index zugreifen.

beispiel

Um die Collection benutzen zu können, wurde eine kleine Beispielfunktion verwendet, über die ein EXCEL-Arbeitsblatt dann auf die eigentliche Klasse/das Objekt zugreifen kann.

Der Aufruf der Funktion erfolgt wie folgt: element_selektieren

VBA-Code ElementSelektieren

Hier zunächst die Funktion die das EXCEL-Arbeitsblatt verwenden kann.

Option Explicit

Function ElementSelektieren(ByVal vZeichenkette As String, ByVal vSeperator As String, ByVal vPosition As Long) As String

  ' VARIABLENDEKLARATION

  ' Es wird eine Instanz des Klassenmoduls CStringZerlegen erzeugt
  Dim iStringZerlegen As New CStringZerlegen

  ' Zuerst muss das Objekt wissen, wie der Seperator lautet
  iStringZerlegen.Trennzeichen = vSeperator

  ' Der String, der zerlegt werden soll, wird hier an das Objekt übergeben
  iStringZerlegen.EinString = vZeichenkette

  ' Das war´s dann auch schon, jetzt kann man die einzelnen Elemente abfragen.
  ' Der Funktion wird das Element an vPosition übergeben.
  ElementSelektieren = iStringZerlegen.Element(vPosition)

End Function

VBA-Code Klasse CStringZerlegen

Option Explicit

  ' Diese Klasse zerlegt einen String, der an EinString übergeben wird, in seine Bestandteile. Ein Bestandteil ist jeweis das Element,
  ' das sich zwischen den Separatoren befindet, den man definiert hat.
  ' Beispiel: der übergebene String lautet "Eins;Zwei;Drei;Vier", der Separator = ";", dann lauten die einzelnen Elemente
  ' Element[1]="Eins", Element[2]="Zwei", Element[3]="Drei", Element[4]="Vier",

' VARIABLENDEKLARATION
  ' Die Eigenschaften dieses Objektes

  ' Die folgenden Eigenschaften werden definiert
  Dim eColSubString As New Collection ' Eine Collection (Liste), die die einzelnen Elemente aufnimmt
  Dim eEinString As String ' Hier wird der String/die Zeichenkette abgelegt, der zu zerlegen ist
  Dim eTrennzeichen As String ' Speichert das Trennzeichen/den Separator ab


' PROPERTYS des Objektes

Public Property Let EinString(vNewValue As String)

  ' In diesem Property Let wird der String an die Klasse CStringZerlegen übergeben und verarbeitet
  ' respektive zerlegt.

  ' VARIABLENDEKLARATION
  Dim lPosition As Long

  ' Der zu zerlegende String wird ein eEinString übergeben
  eEinString = vNewValue

  ' Die While ... Wend-Schleife wird so lange durchlaufen, bis das letzte Trennzeichen erkannt worden ist.
  While InStr(eEinString, eTrennzeichen) > 0
    ' An welcher Position befindet sich das ersten Trennzeichen/der erste Separator?
    lPosition = InStr(eEinString, eTrennzeichen)
    ' Ist ein Trennzeichen im Text entzalten? Wenn ja
    If Len(eEinString) > 1 Or eEinString = eTrennzeichen Then
      ' In die Collection (Liste) wird das erste Element eingefügt.
      eColSubString.Add Left(eEinString, lPosition - 1)
      ' eEinString wird um das erste Element verkürzt inklusive des Trennzeichens verkürzt.
      eEinString = Mid(eEinString, lPosition + 1)
    End If
  Wend
  ' Oft wird ein String NICHT mit einem Separator abgeschlossen dann muss das letzte Element noch
  ' berücksichtigt werden, das macht das If Len(....
  If Len(eEinString) > 0 Then
    eColSubString.Add eEinString
  End If
End Property


Public Property Let Trennzeichen(vNewValue As String)
  ' Das Trennzeichen wird an die Eigenschaft eTrennzeichen übergeben.
  eTrennzeichen = vNewValue
End Property


Public Property Get Trennzeichen() As String
  ' Hier kann man noch mal abfragen, welches Trennzeichen übergeben worden ist.
  Trennzeichen = eTrennzeichen
End Property


Public Property Get Count() As Double
  ' Hier kann man abfragen, wie viele Elemente sich im String befunden haben.
  Count = eColSubString.Count
End Property


' METHODEN des Objekts

Public Function Element(ByVal vKey As Long) As String

  ' Mit dieser Methode kann man sich das x. Element abrufen. Wird eine Element außerhalb der zulässigen
  ' Anzahl an Elementen abgerufen, wird ein Leerstring zurückgegeben.

  If vKey <= eColSubString.Count Then
    Element = eColSubString.Item(vKey)
  Else
    Element = ""
  End If
End Function


Public Sub DebugString()

  ' Während der Programmentwicklung möchte man manchmal den Inhalt der Elementeliste anzeigen lassen.
  ' Diese Methode gibt die Liste im Debug-Fenster aus.

  Dim lZaehler As Long

  For lZaehler = 1 To eColSubString.Count
    Debug.Print Wert(lZaehler)
  Next lZaehler

End Sub

VBA-Projekt

Das VBA-Projekt sieht wie folgt aus.

vba_projekt

Download

Hier erhalten Sie das Beispiel als Download.


Zuletzt aktualisiert am Mittwoch, den 09. April 2014 um 08:37 Uhr  


Machen Sie mit

Sie bewegt ein Thema rund um unser Dorf, das Sie gerne mit anderen diskutieren möchten? Das kommt auf unsere Internetseite von Happerschoß. Melden Sie sich, schreiben Sie eine Mail direkt über den Kontaktbereich oder natürlich auch über Info@happerschoss.net.