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

Array in Array via Split Funct.=Deklarationsprobl.

Forumthread: Array in Array via Split Funct.=Deklarationsprobl.

Array in Array via Split Funct.=Deklarationsprobl.
Andreas
Hallo Excel Enthusiasten,
ich nage grad an einem Problem betreffend die Split Funktion und deren Ergebnisdarstellung in Arrayform. Die Split Funktion hat mir schon oft viel Freude bereitet, aber heute scheitere ich daran alle Ergebnisse eines zweistufigen Split Verfahrens in einem Array darzustellen. Der erste Split soll auf „/“ erfolgen. Dann wird das Ergebnisarray durchlaufen und alle gesplitteten Einträge werden ihrerseits auf Blank gesplittet und deren Ergebnisarray soll dann an die Position im ersten Array geschrieben werden. Einmal bekomme ich den Fehler, daß ein DatenFeld erwartet wird, das andere Mal, das die Typen unverträglich sind. Die Crux ist m.E. nach das das Split Array als String deklariert sein muß. Ich habe schon überlegt über Hilfsschleifen die Ergebnisse an ein anderes Array zu übergeben, welches nicht als String deklariert ist. Aber es wäre schön, einen direkteren Weg zu finden.
Anbei ein kleiner Beispielcode in der Datei in Modul1:
https://www.herber.de/bbs/user/76675.xls
Ich würde mich freuen, wenn jemand etwas Zeit für eine Lösungsinspiration hat.
Vielen Dank und Gruß, Andreas Hanisch
Anzeige
AW: Array in Array via Split Funct.=Deklarationsprobl.
19.09.2011 16:07:42
Nepumuk
Hallo,
das geht so nicht. Einmal ein String immer ein String. Das würde sonst Kuddelmuddel im Arbeitsspeicher erzeugen.
Gruß
Nepumuk
AW: Array in Array via Split Funct.=Deklarationsprobl.
19.09.2011 16:26:00
Tino
Hallo,
ersetze doch einfach das / durch ein Leerzeichen und splitte diesen String.

Dim arrSplit, strText$, n&
strText = "alpha beta gamma/delta epsilon vau/zeta eta theta"
strText = Replace(strText, "/", " ")
arrSplit = Split(strText, " ")
For n = LBound(arrSplit) To UBound(arrSplit)
Debug.Print arrSplit(n)
Next n
Das was Du vor hast geht so nicht, Du kannst ein Array nicht zwischendrin einfach neu Dimensionieren, wenn müsstest Du schon ein neues Array erstellen und dieses entsprechend groß Dimensionieren und die Daten immer dazuschreiben.

Dim arrSplit, strText$, n&, nn&
Dim NewArray()
strText = "alpha beta gamma/delta epsilon vau/zeta eta theta"

strText = Replace(strText, "/", " ")
arrSplit = Split(strText, " ")

Redim Preserve NewArray(Lbound(arrSplit) To Ubound(arrSplit))
For n = Lbound(arrSplit) To Ubound(arrSplit)
   NewArray(nn) = arrSplit(n)
   nn = nn + 1
Next n


strText = "delta epsilon vau/zeta eta theta alpha beta gamma"

strText = Replace(strText, "/", " ")
arrSplit = Split(strText, " ")

Redim Preserve NewArray(Lbound(NewArray) To nn + Ubound(arrSplit) - Lbound(NewArray))
For n = Lbound(arrSplit) To Ubound(arrSplit)
   NewArray(nn) = arrSplit(n)
   nn = nn + 1
Next n

For n = Lbound(NewArray) To Ubound(NewArray)
   Debug.Print NewArray(n)
Next n
Gruß Tino
Anzeige
AW: Array in Array via Split Funct.=Deklarationsprobl.
19.09.2011 16:35:07
Andreas
Hallo Nepumuk, hallo Tino,
vielen Dank für Eure schnelle Antworten. Ich hatte geahnt, daß es keine Lösung ohne zusätzliche Schleifen gibt, aber nun habe ich die Gewißheit, was auch gut ist. Tinos ersten Vorschlag kann ich nicht nehmen. Ich hatte mich etwas unklar ausgedrückt - ich benötige die gesplitteten Werte schon "gruppenweise". Ich werde die Werte wohl über eine zusätzliche Schleife übergeben lassen.
Vielen Dank Euch beiden für Eure Mühe. Es hat geholfen. Inspiration ist nun da!!!
Grüße aus Berlin, Andreas
Anzeige
AW: Array in Array via Split Funct.=Deklarationsprobl.
19.09.2011 16:42:37
Tino
Hallo,
na dann in etwa so.

Sub ArrayInArraySplit()
Dim arrSplit, varWert, strText$, n&

strText = "alpha beta gamma/delta epsilon vau/zeta eta theta"

arrSplit = Split(strText, "/")

For n = Lbound(arrSplit) To Ubound(arrSplit)
    For Each varWert In Split(arrSplit(n), " ")
        Debug.Print "Gruppe: " & n, "Wert: " & varWert
    Next varWert
Next n

End Sub
Gruß Tino
Anzeige
AW: Array in Array via Split Funct.=Deklarationsprobl.
19.09.2011 16:32:48
Christian
Hallo,
ein Vorschlag:

Option Explicit
Sub ArrayInArraySplit()
Dim i As Integer
Dim ii As Integer
Dim arrSplit As Variant
Dim vntRes() As Variant
Const CstrText As String = "alpha beta gamma/delta epsilon vau/zeta eta theta"
arrSplit = Split(CstrText, "/")
ReDim vntRes(UBound(arrSplit))
For i = 0 To UBound(arrSplit)
vntRes(i) = Split(arrSplit(i))
Next
For i = 0 To UBound(vntRes)
For ii = 0 To UBound(vntRes(i))
Debug.Print i; ii; vntRes(i)(ii)
Next
Next
End Sub

Gruß
Christian
Anzeige
AW: Array in Array via Split Funct.=Deklarationsprobl.
19.09.2011 19:44:46
Andreas
Hi Christian, hallo Tino,
entschuldigt meine späte Antwort. Ich habe die email Replikation lange nicht laufen lassen. Genau so etwas wie in Euren beiden letzten Antworten schwebte mir vor! Total genial und schön knackig kurz. Wow!
Habt Dank und noch einen schönen Abend!
Grüße aus Berlin, Andreas
Anzeige
...Oder so, ...
20.09.2011 02:42:00
Luc:-?
…Andreas:

Sub ArrayInArraySplit()     'Ergebnis listet griech Ziffernnamen untereinander
Const CstrText As String = "alpha beta gamma/delta epsilon vau/zeta eta theta"
Dim i As Integer, j As Integer, arrSplit(), x As Variant
ReDim arrSplit(Len(CstrText) - Len(Replace(CstrText, "/", "")))
For Each x In Split(CstrText, "/")
arrSplit(i) = Split(x)
For j = 0 To Len(x) - Len(Replace(x, " ", ""))
Debug.Print arrSplit(i)(j)
Next j
i = i + 1
Next x
End Sub
Mache ich öfter!
Gruß Luc :-?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Array in Array via Split Funktion in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Array in ein anderes Array zu splitten, kannst Du die Split Funktion verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Erstelle eine Excel VBA Funktion: Öffne den VBA-Editor mit ALT + F11 und füge ein neues Modul hinzu.

  2. Deklariere die Variablen:

    Dim arrSplit As Variant
    Dim vntRes() As Variant
    Dim strText As String
  3. Weise einen Wert zu: Setze den Text, den Du splitten möchtest.

    strText = "alpha beta gamma/delta epsilon vau/zeta eta theta"
  4. Verwende die Split Funktion: Teile den Text in zwei Dimensionen:

    arrSplit = Split(strText, "/")
    ReDim vntRes(UBound(arrSplit))
  5. Iteriere durch das Array: Füge die gesplitteten Werte in das neue Array ein.

    Dim i As Integer
    For i = 0 To UBound(arrSplit)
       vntRes(i) = Split(arrSplit(i), " ")
    Next
  6. Gib die Werte aus: Verwende eine Schleife, um die Werte anzuzeigen.

    Dim j As Integer
    For i = 0 To UBound(vntRes)
       For j = 0 To UBound(vntRes(i))
           Debug.Print vntRes(i)(j)
       Next j
    Next i

Häufige Fehler und Lösungen

  • Fehler: "Datenfeld erwartet"
    Dieser Fehler tritt auf, wenn Du versuchst, ein Array mit einem inkompatiblen Datentyp zu umgehen. Stelle sicher, dass Du das Array richtig deklariert hast.

  • Typen unverträglich
    Achte darauf, dass Du die Daten korrekt in den Variablen speicherst. Wenn Du ein String-Array verwendest, stelle sicher, dass alle Daten als String deklariert sind.


Alternative Methoden

Es gibt verschiedene Möglichkeiten, ein Array zu splitten:

  • Ersetzen und Splitten: Anstatt einen direkten Split durchzuführen, kannst Du erst die Trennzeichen ersetzen. Beispiel:

    strText = Replace(strText, "/", " ")
    arrSplit = Split(strText, " ")
  • VBA Arrays verwenden: Du kannst auch mit Redim Preserve arbeiten, um die Größe des Arrays dynamisch anzupassen, ohne die bestehenden Daten zu verlieren.


Praktische Beispiele

Hier sind einige praktische Beispiele, die Du in Dein VBA-Projekt integrieren kannst:

  1. Ein einfaches Split Beispiel:

    Sub BeispielSplit()
       Dim arr As Variant
       arr = Split("A,B,C,D", ",")
       Dim i As Integer
       For i = LBound(arr) To UBound(arr)
           Debug.Print arr(i)
       Next i
    End Sub
  2. Gruppenweise Verarbeitung:

    Sub GruppenweiseSplit()
       Dim text As String
       text = "alpha beta gamma/delta epsilon"
       Dim splitArr As Variant
       splitArr = Split(text, "/")
       Dim i As Integer
       For i = 0 To UBound(splitArr)
           Debug.Print "Gruppe " & i & ": " & splitArr(i)
       Next i
    End Sub

Tipps für Profis

  • Verwende Option Explicit: Dieser Befehl hilft, mögliche Fehler bei der Variablendeklaration zu vermeiden.

  • Dokumentiere Deinen Code: Schreibe Kommentare, um die Funktionsweise Deines Codes zu erklären, besonders bei komplexen Split-Operationen.

  • Nutze For Each Schleifen: Diese können den Code übersichtlicher machen, besonders wenn Du durch Arrays iterierst.


FAQ: Häufige Fragen

1. Wie kann ich ein Array mit mehreren Dimensionen splitten?
Nutze die Split Funktion in einer Schleife, um die inneren Arrays zu erstellen.

2. Was sind die besten Praktiken beim Arbeiten mit Arrays in VBA?
Verwende Option Explicit, dokumentiere Deinen Code und achte auf die Datentypen. Achte darauf, dass Du Arrays nur mit kompatiblen Datentypen füllst, um 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