Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: String anhand von Trennzeichen splitten

String anhand von Trennzeichen splitten
10.11.2004 14:37:59
Trennzeichen
Hallo,
folgendes Problem:
Ich lese aus einer (Log-)Datei (=Textdatei) zeilenweise.In jeder Zeile stehen durch Tabulatoren getrennt mehrere Werte.Diese Werte will ich in ein Array aufsplitten. Bei VB gibt's dafür ja den tollen Befehl Split, aber nicht bei VBA, da ist das irgendwas mit geteilten und nicht geteilten Fenstern (?) ...
Code ist soweit mal ganz banal:
Open dateipfad For Input As #1
Line Input #1, zwischenspeicher
Und nun möcht ich zwischenspeicher splitten, beim VB wäre das ja:
gesplittet = Split(zwischenspeicher,trennzeichen)
Also zB aus zwischenspeicher = "3,4,5" möchte ich dann gesplittet(1)="3", gesplittet(2)="4", gesplittet(3)="5" haben.
Wie geht das? (Bin schon halb am verzweifeln!)
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: String anhand von Trennzeichen splitten
Trennzeichen
Hi Frank

Sub t()
Dim strTest As String
Dim Arr(2) As Variant
strTest = "a,b,c"
Arr(0) = Left(strTest, InStr(strTest, ",") - 1)
strTest = Right(strTest, Len(strTest) - InStr(strTest, ","))
Arr(1) = Left(strTest, InStr(strTest, ",") - 1)
strTest = Right(strTest, Len(strTest) - InStr(strTest, ","))
Arr(2) = strTest
MsgBox Arr(0)
MsgBox Arr(1)
MsgBox Arr(2)
End Sub

Gruss
Chris
Anzeige
AW: String anhand von Trennzeichen splitten
10.11.2004 15:07:23
Trennzeichen
Danke,
das funktioniert schon mal! :)
Jetzt muss ich mir nur noch eine Funktion daraus basteln, damit auch die teilweise unterschiedlich langen Strings splitten kann ... :)
AW: String anhand von Trennzeichen splitten
Trennzeichen
die Funktion gibt es auch in VBA.
Split-Funktion
Beschreibung
Gibt ein nullbasiertes, eindimensionales Datenfeld zurück, das eine festgelegte Anzahl an untergeordneten Zeichenfolgen enthält.
Syntax
Split(expression[, delimiter[, limit[, compare]]])
Anzeige
AW: String anhand von Trennzeichen splitten
10.11.2004 15:01:46
Trennzeichen
Dann erklär mir mal einer warum in diesem Fall a immer leer ist?!
Dim a As Variant
Dim strExpression As String, strDelim As String
strExpression = "Hans||Erwin||Jens||Monika"
strDelim = "||"
a = Split(strExpression, strDelim)
AW: String anhand von Trennzeichen splitten
10.11.2004 15:39:32
Trennzeichen
Danke für die Hilfe, besonders an ChrisL, er hat mir entscheidend geholfen! :)
Als Dankeschön poste ich hier mal die fertige Funktion, damit andere es nicht so schwer haben.

Function teile(quelle As String, trenner As String)
Dim ergarray(999) As Variant    'Ergebniss des Splittens
'999 da offenes Array nicht erlaubt war
Dim pos As Integer              'Position im Array
Dim reststring As String        'restlicher zu verarbeitender String
reststring = quelle
pos = 0
While InStr(reststring, trenner) <> 0
ergarray(pos) = Left(reststring, InStr(reststring, trenner) - 1)
reststring = Right(reststring, Len(reststring) - InStr(reststring, trenner))
pos = pos + 1
Wend
ergarray(pos) = reststring
teile = ergarray
End Function

Anzeige
AW: String anhand von Trennzeichen splitten
Trennzeichen
Hi Frank
Danke für die Rückmeldung und den Code.
betreffend...
'999 da offenes Array nicht erlaubt war
mit "ReDim Preserve" kannst du kannst du das Array "vergrössern". Und wenn ich schonmal dran bin... mit UBound(Arr) kannst du die aktuelle Dimensionierung ermitteln.
Gruss
Chris
Anzeige
AW: String anhand von Trennzeichen splitten
10.11.2004 15:58:13
Trennzeichen
Heh, nochmals Danke! :)
So jetzt habe ich das nochmal umgeschrieben, pos rausgeschmissen und dafür Redim und UBound eingebaut ... Jetzt dürfte es "perfekt" dynamisch sein! :)
(Falls doch noch Fehler drin sind, bitte Bescheid geben!)

Function teile(quelle As String, trenner As String)
Dim ergarray() As Variant       'Ergebniss des Splittens
Dim reststring As String        'restlicher zu verarbeitender String
reststring = quelle
ReDim Preserve ergarray(0)
While InStr(reststring, trenner) <> 0
ergarray(UBound(ergarray)) = Left(reststring, InStr(reststring, trenner) - 1)
reststring = Right(reststring, Len(reststring) - InStr(reststring, trenner))
ReDim Preserve ergarray(UBound(ergarray) + 1)
Wend
ergarray(UBound(ergarray)) = reststring
teile = ergarray
End Function

Anzeige
AW: String anhand von Trennzeichen splitten
Trennzeichen
Hi Frank
Nach meinem Geschmack siehts jetzt perfekt aus ;-)
Gruss
Chris
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

String anhand von Trennzeichen splitten


Schritt-für-Schritt-Anleitung

Um einen String in Excel VBA anhand von Trennzeichen zu zerlegen, kannst Du die Split-Funktion verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject", wähle "Einfügen" und dann "Modul".

  3. Schreibe den folgenden Code:

    Sub BeispielSplit()
        Dim strTest As String
        Dim gesplittet As Variant
        Dim trenner As String
    
        strTest = "3,4,5"
        trenner = ","
    
        gesplittet = Split(strTest, trenner)
    
        MsgBox gesplittet(0) ' Gibt 3 aus
        MsgBox gesplittet(1) ' Gibt 4 aus
        MsgBox gesplittet(2) ' Gibt 5 aus
    End Sub
  4. Führe das Makro aus: Gehe zurück zu Excel und drücke ALT + F8, wähle "BeispielSplit" und klicke auf "Ausführen".


Häufige Fehler und Lösungen

Hier sind einige häufige Fehler, die beim Zerlegen eines Strings in VBA auftreten können, sowie deren Lösungen:

  • Problem: Der Array ist leer.

    • Lösung: Stelle sicher, dass das Trennzeichen korrekt angegeben ist und dass der String tatsächlich das Trennzeichen enthält.
  • Problem: Fehlermeldung bei der Verwendung von Split.

    • Lösung: Überprüfe die Syntax der Split-Funktion. Die korrekte Verwendung ist Split(expression[, delimiter[, limit[, compare]]]).

Alternative Methoden

Wenn Du keine VBA-Programmierung verwenden möchtest, kannst Du auch die Funktionen in Excel selbst nutzen:

  • Excel-Formeln: Verwende die Funktion TEXTSPLIT (in neueren Excel-Versionen verfügbar), um einen Text basierend auf einem Trennzeichen zu zerlegen.

    =TEXTSPLIT(A1, ",")
  • Power Query: Importiere die Daten in Power Query und benutze die Funktion "Spalte nach Trennzeichen teilen".


Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du Strings in VBA teilen kannst:

  1. Zerlegen eines Strings mit mehreren Trennzeichen:

    Sub MehrereTrennzeichen()
        Dim strTest As String
        Dim gesplittet As Variant
        Dim trenner As String
    
        strTest = "a|b,c;d"
        trenner = ",|;|"
    
        gesplittet = Split(strTest, trenner)
    
        For Each item In gesplittet
            MsgBox item
        Next item
    End Sub
  2. Strings in ein Array umwandeln:

    Function StringToArray(quelle As String, trenner As String) As Variant
        StringToArray = Split(quelle, trenner)
    End Function

Tipps für Profis

  • Dynamische Arrays: Verwende ReDim Preserve, um die Größe eines Arrays dynamisch anzupassen, wenn Du das Ergebnis des Splittens in einer Funktion zurückgibst.

  • Fehlerbehandlung einfügen: Nutze On Error Resume Next, um potenzielle Laufzeitfehler zu behandeln, besonders wenn Du mit unvorhersehbaren Daten arbeitest.

  • VBA-String-Funktionen kombinieren: Kombiniere Split mit anderen Funktionen wie Join oder Replace, um komplexe Textoperationen durchzuführen.


FAQ: Häufige Fragen

1. Wie kann ich einen String in Excel ohne VBA splitten? Du kannst die TEXTSPLIT-Funktion in modernen Excel-Versionen verwenden oder Power Query nutzen, um Texte zu zerlegen.

2. Was ist der Unterschied zwischen Split und Join in VBA? Split zerlegt einen String in ein Array, während Join die Elemente eines Arrays zu einem String zusammenfügt.

3. Kann ich mehrere Trennzeichen gleichzeitig verwenden? Ja, Du kannst mehrere Trennzeichen in der Split-Funktion verwenden, indem Du diese in einer Variablen definierst.

4. Wie gehe ich mit leeren Werten um? Überprüfe nach dem Splitten, ob die Array-Elemente leer sind, um unerwartete Fehler zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige