EXCEL 2013 VBA: Zeichenkette/String in Bestandteile zerlegen

Transcription

EXCEL 2013 VBA: Zeichenkette/String in Bestandteile zerlegen
EXCEL 2013 VBA: Zeichenkette/String in Bestandteile zerlegen
Aktualisiert Mittwoch, den 09. April 2014 um 09:37 Uhr
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.
1/6
EXCEL 2013 VBA: Zeichenkette/String in Bestandteile zerlegen
Aktualisiert Mittwoch, den 09. April 2014 um 09:37 Uhr
Um EXCEL-Arbeitsblatt
ein
die
Collection
benutzen
dann
zu
auf
können,
die
eigentliche
wurde eine
Klasse/das
kleine Beispielfunktion
Objekt zugreifen
verwendet,
kann.
über die
Der
Aufruf
der Funktion
erfolgt
wie
folgt:
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.
2/6
EXCEL 2013 VBA: Zeichenkette/String in Bestandteile zerlegen
Aktualisiert Mittwoch, den 09. April 2014 um 09:37 Uhr
' 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)
3/6
EXCEL 2013 VBA: Zeichenkette/String in Bestandteile zerlegen
Aktualisiert Mittwoch, den 09. April 2014 um 09:37 Uhr
' 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
4/6
EXCEL 2013 VBA: Zeichenkette/String in Bestandteile zerlegen
Aktualisiert Mittwoch, den 09. April 2014 um 09:37 Uhr
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
5/6
EXCEL 2013 VBA: Zeichenkette/String in Bestandteile zerlegen
Aktualisiert Mittwoch, den 09. April 2014 um 09:37 Uhr
For lZaehler = 1 To eColSubString.Count
Debug.Print Wert(lZaehler)
Next lZaehler
End Sub
VBA-Projekt
Das VBA-Projekt sieht wie folgt aus.
Download
Hier erhalten Sie das Beispiel als Download.
6/6