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