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

Forumthread: Split Funktion

Split Funktion
10.06.2020 14:47:42
Marc
Hallo liebe Forumsgemeinde,
mit Hilfe einer Splitfunktion möchte ich Textstellen aus einer Zelle eines Excel Sheets auslesen, die wie folgt aussieht:
"Account-Nummer: 30004514
Studioname: FitX - Club 56 - B2B Verwaltung Abrechnungsdatum: 11.02.2020
Leistungsdatum: 11.02.2020
Belegnummer: MC20-045546"

Mit dem folgenden Code teile ich den String zunächst auf mit Hilfe eines Doppelpunkts als Trennzeichen:
Sub Converter()
Dim Zeile As Integer, WS As Worksheet, Str As String, Temp As String, Datum As String, Beleg As  _
String
Set WS = ThisWorkbook.Worksheets("Table 1")
' Datum & Abrechnungsnummer ermitteln
For Zeile = 1 To 5
If InStr(1, WS.Cells(Zeile, 1).Value, "Studioname") > 0 Then
Str = WS.Cells(Zeile, 1).Value
Exit For
Else
End If
Next Zeile
Dim Teilstring() As String
Teilstring = Split(Str, ":")
'On Error Resume Next
Datum = Split(Teilstring(3))   ' Fehlermeldung "Typen unverträglich!"
End Sub
Der String im entsprechenden Feld des Arrays (Teilstring(3) sieht wie folgt aus:
" 11.02.2020
Leistungsdatum"

Kann mir jemand sagen weshalb VBA "Typen unverträglich" meldet wenn ich versuche die Leerzeichen aus Teilstring(3) mit einem weiteren Split zu entfernen? Muss ich die Variable Teilstring redimensionieren bevor ich sie erneut splitten kann?
VG,
Marc
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Split Funktion
10.06.2020 15:01:01
peterk
Hallo
Datum ist als String definiert.
AW: Split Funktion
10.06.2020 15:03:40
Marc
Das tut aber in diesem Fall aber nichts zur Sache. Denn das Array ist ebenfalls ein String. Ich bekomme diese Fehlermeldung auch wenn ich Textstellen nehme, die kein Datum darstellen.
AW: Split Funktion
10.06.2020 15:15:05
peterk
Hallo
Die Split Funktion erwartet aber ein Array und keinen String. Du hast ja Teilstring auch als Array definiert.

Dim Teilstring() as String ' ein Array von Strings
Dim Datum as String ' Nur ein String

Anzeige
eine unglückliche Formulierung: Split erwartet....
10.06.2020 15:51:30
EtoPHG
aber ein Array, Peter,
Der Input für Split ist ein String, der Output ein Variant. Im Fall, dass mehrere Teilstrings erzeugt werden ein Array, sonst ein simpler String.
Der Befehl müsste so lauten (der erste Split ist unnötig):
Datum = Split(Split(Str,":")(3)," ")(0)

wenn die Trennung tatsächlich ein Leerzeichen ist. Es könnte allerdings ein LF sein, dann
Datum = Split(Split(Str,":")(3),Chr(10))(0)
Gruess Hansueli
Anzeige
AW: eine unglückliche Formulierung: Split erwartet....
10.06.2020 16:14:26
Mullit
Hallo Hansueli,
war allerdings hier von Peter sicher richtig gemeint: der Rückgabewert von Split() ist immer ein String-Array: msgbox typename(split("Hallo, wie geht's?"))....;-)
Gruß, Mullit
Falsch, Resultat kann auch KEIN array sein
10.06.2020 18:07:27
EtoPHG
, sondern ein simpler String, Mullit
Beweis:
msgbox typename(split("Danke, Es geht mir gut!","¦")

Gruess Hansueli
Anzeige
AW: Falsch, Resultat kann auch KEIN array sein
10.06.2020 18:37:11
Mullit
Hallo,
na Hansueli, da müssen wir aber noch mal testen, was...;-)
Userbild
Der Rückgabewert ist immer ein nullbasiertes eindim. String-Array, im bes. Fall wie Deinem eben mit nur einem Element...
MsgBox Split("Danke, Es geht mir gut!", "¦")(0)
Gruß, Mullit
Anzeige
AW: nich so ganz Falsch, aber...
10.06.2020 19:18:59
Mullit
...Hansueli, insofern hast Du nich ganz Unrecht, sich das nochmal anzugucken, ggf müsste man noch einen Sonderfall abfangen....
Sub test()
Dim astrArray() As String, strText As String

astrArray = Split(strText, "¦")

If Ubound(astrArray) < 0 Then
   MsgBox "wat denn nu, nix drin...!?", vbExclamation
Else
   MsgBox "juhuu, weiter gehts...", vbExclamation
End If
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
ich hatte es im Hinterkopf, dass ich
10.06.2020 19:57:37
EtoPHG
genau auf dieses Phänomen/Resultat bei einer Situation vor Jahren getroffen bin, Mullit
...aber nicht im Vorderkopf :-)
...was mich zur Nicht-Array Formulierung verführte. Das Resultat ist ein aber ein Array mit einem Ubound von -1 ! Darum hast du mehr Recht, als ich ;-)
Gruess Hansueli
Anzeige
AW: mach Dir da man kein Kopp......
10.06.2020 20:27:43
Mullit
...möchte man sagen, Hansueli, aber wir müssen da viell. nochmal etwas genauer unterscheiden, den Ubound-Wert -1 hat nur das Array in meinem konstruierten Nullstring Bsp., wird ein Text übergeben, ist exakt ein Element vorhanden und der Ubound-Wert somit 0....;-)
Sub test()
Dim strText As String
MsgBox UBound(Split(strText, "¦"))
MsgBox UBound(Split("Danke, Es geht mir gut!", "¦"))
End Sub

Gruß, Mullit
Anzeige
Ich spendiere noch die vergessene Klammer ;-)
10.06.2020 18:09:35
EtoPHG

AW: Split Funktion
10.06.2020 16:46:24
Marc
Hallo PeterK,
vielen Dank für diesen Hinweis. Ich war der Annahme ein String sei im Grunde ein eindimensionales Array und daher könne man den Split auch problemlos darauf anweden aber dann weiß ich ja nun Bescheid.
VG
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Split Funktion in Excel VBA: Eine umfassende Anleitung


Schritt-für-Schritt-Anleitung

Um die Split Funktion in Excel VBA zu verwenden, folge diesen Schritten:

  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 (DeinWorkbook)" > Einfügen > Modul.

  3. Schreibe einen Code: Füge den folgenden Beispielcode ein, um einen String zu splitten:

    Sub BeispielSplit()
       Dim Text As String
       Dim Teile() As String
       Text = "Account-Nummer: 30004514; Studioname: FitX - Club 56"
       Teile = Split(Text, ";")
       MsgBox Teile(0) ' Gibt "Account-Nummer: 30004514" aus
    End Sub
  4. Führe den Code aus: Klicke auf F5 oder gehe zu Run > Run Sub/UserForm.


Häufige Fehler und Lösungen

  1. Typen unverträglich: Wenn du die Fehlermeldung "Typen unverträglich" erhältst, überprüfe, ob du versuchst, einen String an die Split Funktion zu übergeben, wenn ein Array erwartet wird. Stelle sicher, dass der Rückgabewert korrekt behandelt wird.

    Beispiel:

    Dim Teilstring() As String
    Teilstring = Split("Test: Beispiel", ":")
    MsgBox Teilstring(1) ' Gibt " Beispiel" aus
  2. Ubound-Fehler: Achte darauf, dass Ubound nur für Arrays verwendet wird. Wenn das Array leer ist, gibt Ubound -1 zurück.

    Beispiel:

    If UBound(Teile) < 0 Then
       MsgBox "Das Array ist leer."
    End If

Alternative Methoden

Neben der Split Funktion gibt es auch andere Möglichkeiten, Strings in Excel VBA zu teilen:

  • Text-to-Columns: Diese Funktion in Excel kann genutzt werden, um Daten zu splitten, ohne VBA zu verwenden. Gehe zu Daten > Text in Spalten.
  • Reguläre Ausdrücke: Mit der Microsoft VBScript Regular Expressions-Bibliothek kannst du komplexere Split-Operationen durchführen.

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung der Split Funktion in VBA:

  • Splitting mit mehreren Trennzeichen:

    Dim Text As String
    Dim Teile() As String
    Text = "Apfel,Orange;Banane|Traube"
    Teile = Split(Text, ",;|")
    MsgBox Teile(0) ' Gibt "Apfel" aus
  • Zeilenumbrüche splitten:

    Dim Text As String
    Dim Teile() As String
    Text = "Zeile1" & vbCrLf & "Zeile2"
    Teile = Split(Text, vbCrLf)
    MsgBox Teile(1) ' Gibt "Zeile2" aus

Tipps für Profis

  • Nutze Join für das Gegenteil: Wenn du ein Array wieder in einen String umwandeln möchtest, verwende die Join Funktion. Beispiel:

    Dim Text As String
    Text = Join(Teile, ";")
  • Verwende Option Explicit: Um Fehler zu vermeiden, setze Option Explicit am Anfang deines Moduls. Dies zwingt dich, alle Variablen zu deklarieren.

  • Debugging mit MsgBox: Wenn du Probleme hast, fügen Sie MsgBox-Befehle hinzu, um den Inhalt deiner Variablen während der Ausführung zu überprüfen.


FAQ: Häufige Fragen

1. Was ist die Split Funktion in VBA?
Die Split Funktion in VBA wird verwendet, um einen String in ein Array von Substrings zu teilen, basierend auf einem angegebenen Trennzeichen.

2. Wie kann ich mehrere Trennzeichen verwenden?
Die Split Funktion unterstützt standardmäßig nur ein Trennzeichen. Für mehrere Trennzeichen kannst du die Split Funktion mehrfach verschachteln oder eine benutzerdefinierte Funktion schreiben.

3. Was passiert, wenn der String leer ist?
Wenn der zu splittende String leer ist, gibt die Split Funktion ein leeres Array zurück. Achte darauf, dies in deinem Code zu überprüfen, um Fehler zu vermeiden.

4. Kann ich die Split Funktion auch in Excel-Formeln verwenden?
Nein, die Split Funktion ist spezifisch für VBA und kann nicht direkt in Excel-Formeln verwendet werden. Du kannst jedoch VBA-Makros erstellen, die diese Funktionalität bieten.

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