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

Forumthread: Komma getrennte Werte aus Zelle in Array einlesen

Komma getrennte Werte aus Zelle in Array einlesen
Steve
Guten Tag,
Weiss jemand wie man Komma getrennte Werte aus der selben Zelle in einen Array einlesen kann.
Ich könnte das über die "Text to Column" Funktion erreichen, aber es kommt z.T. vor, dass es mehr Spalten brauchen würde als in Excel XP vorhanden.
Zelle A2 hätte z.B. die Werte "20, 40,200,500,222" (z.T. mit Leerschlag nach Komma z.T. ohne)
Per VBA würden diese Werte in einen Array eingelesen: array(0)=20, array(1)=40, array(2)=200 etc...
Die Anzahl der Zahlen die in den Array eingelesen werden varieren aber.
Perfekt wäre es wenn es auch funktionieren würde, falls anstelle eines Kommas ein Semikolon stehen würde (also z.B. "20, 40;200,400;223")
Da die ganze Spalte A solche komma-getrennten Werte hat in den Zellen hat, müsste ich auch irgendwie identifizieren können zu welcher Zeile der Array gehört.
Ich denke mal nicht dass man einen mehrdimensionalen Array kreieren kann, wenn die Zellen eine unterschiedliche Anzahl komma-getrennter Werte in Spalte A haben.... oder doch?
Vielen Dank im Voraus für die Hilfe.
Beste Grüsse
Steve
Anzeige
Die Werte in den Zellen sind ja idR Text,...
02.02.2010 14:29:36
Luc:-?
...zumindest, wenn sie mehr als ein Komma enthalten, Steve;
Bei nur einem Komma wäre ohnehin Semikolon besser, um das Ganze nicht noch komplizierter zu machen. Ein Feld mit variabler Elementeanzahl erzeugst du aus Text am besten mit vbFkt Split — allerdings kann die nur mit jeweils einem Trennzeichen (Delimiter) umgehen. Du musst also am besten zuvor alle Kommata mit vbFkt Replace durch Semikolons ersetzen. Die Variable für das Feld deklarierst (Dim) du als Variant ohne Dimensionsangabe. Im Ergebnis des Splittings entsteht dann ein Variant, der ein 1dimensionales Feld mit nahezu beliebiger Elementeanzahl beinhaltet. Die Elemente spricht man in diesem Fall wie gewohnt an. Hast du aber eine dimensionierte Variable vom Typ Variant deklariert, kannst du jedem ihrer Elemente einen solchen feld-beinhaltenden Variant zuordnen. Deren Elemente wären dann bspw so anzusprechen...
vVar(0)(0) - vVar(0)(1) - ... - vVar(1)(0) - vVar(1)(1) - ...
Gruß Luc :-?
Anzeige
AW: Komma getrennte Werte aus Zelle in Array einlesen
02.02.2010 14:35:11
Reinhard
Hallo Steve,
ich hab da als Ansatz was gebastelt was zum Ende der Laufzeit noch einen kleinen bug hat, es kommt Index-Fehler weil es "zu weit" läuft.
Sub tt()
Dim ArrA()
Dim Zei As Long, Z As Long, S(), Dummy, N, NN, Anz
Z = Cells(Rows.Count, 1).End(xlUp).Row
For Zei = 1 To Z
ReDim Preserve S(Zei)
Dummy = Replace(Replace(Cells(Zei, 1), ";", ","), " ", "")
S(Zei) = Split(Dummy, ",")
Anz = IIf(UBound(S(Zei)) > Anz, UBound(S(Zei)), Anz)
Next Zei
ReDim ArrA(Zei, Anz)
For N = 1 To Zei
For NN = 1 To UBound(S(N))
ArrA(N, NN) = S(N)(NN - 1)
MsgBox ArrA(N, NN)
Next NN
Next N
End Sub

Gruß
Reinhard
Anzeige
AW: Komma getrennte Werte aus Zelle in Array einlesen
02.02.2010 14:49:51
Josef
Hallo Steve,

das geht z.B. so.

Sub aa()
  Dim vntValues() As Variant, vntTmp As Variant
  Dim lngIndex As Long, strSep As String, strSepAlt As String
  
  strSep = ";" 'Trennzeichen
  strSepAlt = "," 'alternatives Trennzeichen
  
  vntTmp = Range("A1:A3")
  
  Redim vntValues(1 To UBound(vntTmp))
  
  For lngIndex = LBound(vntValues) To UBound(vntValues)
    vntValues(lngIndex) = Split(Replace(vntTmp(lngIndex, 1), strSepAlt, strSep), strSep)
  Next
  
  Debug.Print vntValues(1)(0)
  
End Sub

Gruß Sepp

Anzeige
Variante...
02.02.2010 14:49:58
Ramses
Hallo
Probiers mal so
Option Explicit

Sub Demo_Array()
    'Version XP
    Dim i As Long, tmpF As Long
    Dim strText As String, tmpArr() As Variant
    tmpF = 1
    strText = "1,288,388888888,48,5,6,7888,8,9"
    'strText = Range("a1").Text
    ReDim Preserve tmpArr(1)
    For i = 1 To Len(strText)
        If Mid(strText, i, 1) = "," Then
            tmpArr(UBound(tmpArr)) = Mid(strText, tmpF, i - tmpF)
            tmpF = i + 1
            ReDim Preserve tmpArr(UBound(tmpArr) + 1)
        End If
    Next i
    tmpArr(UBound(tmpArr)) = Mid(strText, tmpF, Len(strText) - (tmpF - 1))
    ReDim Preserve tmpArr(UBound(tmpArr))
    'Inhaltskontrolle
    For i = 0 To UBound(tmpArr)
        Debug.Print tmpArr(i)
    Next i
End Sub



Sub Demo_Array2()
    'Version 2003 und später
    Dim i As Long
    Dim strText As String, tmpArr As Variant
    strText = "1,288,388888888,48,5,6,7888,8,9"
    'strText = Range("A1")
    tmpArr = Split(strText, ",")
    For i = 0 To UBound(tmpArr)
        Debug.Print tmpArr(i)
    Next i
End Sub

Gruss Rainer
Anzeige
Und noch eine Variante, die...
02.02.2010 15:15:04
Renee
gleich der Text-to-Column Funktion das Verteilen in die Spalten wahrnimmt, aber bei mehr Einträgen als vorhandene Spalten, den Rest ins Nirwana schickt:
Sub ZuvielTextInSpalten()
Dim vArr
Dim lngRow As Long
With ActiveSheet
For lngRow = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
vArr = Split(Replace(Replace(.Cells(lngRow, 1), " ", ""), _
",", ";"), ";")
If UBound(vArr) > -1 Then _
.Range(.Cells(lngRow, 1), _
.Cells(lngRow, _
Application.Min(UBound(vArr) + 1, .Columns.Count))) = vArr
Next lngRow
End With
End Sub
GreetZ Renée
Anzeige
AW: Komma getrennte Werte aus Zelle in Array einlesen
02.02.2010 15:33:51
Steve
Vielen Dank Luc, Reinhardt, Josef und Rames
Genial!
Jetzt muss ich nur noch die Zahlen wieder richtig auslesen können in diesem Array.
Da man ja nie genau weiss, wieviele Zahlen in der Zelle waren beim auslesen und es sonst diese "subscript out of range" Fehlermeldung gibt, denke ich könnte man neben her noch die Kommas zählen über die folgende Funktion und weiss somit wieviele Zahlen in der Zelle pro Zeile waren.
=LEN(A1)-LEN(SUBSTITUTE(A1;",";""))
wahrscheinlich kann man es auch so einrichten, dass beim "Subscript out of range" Fehler automatisch auf die nächste Koordinate gesprungen wird. Ich muss das mal ausprobieren.
Danke noch einmal für die super Hilfe.
Gruss
Steve
Anzeige
AW: Komma getrennte Werte aus Zelle in Array einlesen
02.02.2010 15:59:58
Renee
Hi Steve,
Was willst du den noch mit Zählen von Trennzeichen rummachen ?
Nach einem
vArr = Spit(expression, separator)

bekommst du doch mit
iAnzahl = UBound(vArr) +1

die Anzahl Elemente in die Variable iAnzahl.
Überhaupt frage ich mich langsam, was den das Ziel der ganzen Übung ist!
GreetZ Renée
Anzeige
AW: Komma getrennte Werte aus Zelle in Array einlesen
02.02.2010 16:34:47
Steve
Vielen Dank Renee
Stimmt, sorry war wohl etwas zu kompliziert gedacht.
Was ich damit anstelle ist folgendes:
Es geht um Abhängigkeiten. Das heisst es gibt 2 Listen welche über XML ins Excel gelangen. Die eine Liste enthält Angaben zu welchen IDs aus der anderen Liste Abhängigkeiten bestehen. Es wird dann ein Report gebildet, der diese Abhängigkeiten über Gruppierungen etc darstellt und die entsprechenden Links dazu liefert.
Gruss
Steve
Anzeige
;

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

Komma getrennte Werte in Excel Arrays einlesen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und stelle sicher, dass du mit den Zellen arbeitest, die die durch Komma getrennten Werte enthalten.
  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge ein neues Modul hinzu: Rechtsklicke im Projektfenster auf "VBAProject (DeineArbeitsmappe)", wähle Einfügen und dann Modul.
  4. Kopiere und füge den folgenden VBA-Code ein:
Sub KommaGetrennteWerteEinlesen()
    Dim vntValues() As Variant
    Dim lngIndex As Long
    Dim strText As String
    Dim strSep As String

    strSep = ";" ' oder "," je nach Trennzeichen
    strText = Range("A1").Value ' Ändere den Zellbezug nach Bedarf

    vntValues = Split(Replace(strText, " ", ""), strSep)

    For lngIndex = LBound(vntValues) To UBound(vntValues)
        Debug.Print vntValues(lngIndex)
    Next lngIndex
End Sub
  1. Führe das Makro aus: Drücke F5 oder klicke auf Ausführen im Menü.
  2. Überprüfe das Immediate-Fenster (STRG + G), um die Werte zu sehen, die aus der Zelle eingelesen wurden.

Häufige Fehler und Lösungen

  • Fehler: "Subscript out of range"
    Dieser Fehler tritt auf, wenn du versuchst, auf ein Element eines Arrays zuzugreifen, das nicht existiert. Stelle sicher, dass die Zelle nicht leer ist und dass das Trennzeichen korrekt gesetzt ist.

  • Fehler: "Type mismatch"
    Dies geschieht, wenn die Daten in der Zelle nicht im erwarteten Format sind. Überprüfe die Werte in der Zelle und achte darauf, dass sie korrekt formatiert sind.

  • Lösung für unterschiedliche Trennzeichen
    Falls du sowohl Kommas als auch Semikolons verwendest, kannst du den Code anpassen, indem du Replace für beide Trennzeichen nimmst, wie im folgenden Beispiel:

strText = Replace(Replace(strText, ";", ","), " ", "")

Alternative Methoden

  • Text to Columns: Du kannst auch die Funktion Text in Spalten nutzen, um durch Komma getrennte Werte in Spalten aufzuteilen. Wähle die Zelle aus, gehe zu Daten > Text in Spalten, wähle Getrennt und dann das Trennzeichen aus.

  • Formelbasierte Lösung: Wenn du die Werte in Zeilen umwandeln möchtest, kannst du die TRANSPOSE-Funktion in Kombination mit SPLIT verwenden, um diese Komma getrennten Werte in Zeilen darzustellen.


Praktische Beispiele

  1. Beispiel für einfache Trennung:

    • In Zelle A2 steht 20, 40, 200, 500, 222. Nach Ausführen des Codes werden die Werte in einem Array gespeichert und können weiterverarbeitet werden.
  2. Beispiel für unterschiedliche Trennzeichen:

    • In Zelle A3 steht 20; 40, 200; 500, 222. Durch das Ersetzen der Trennzeichen wird die gesamte Liste in ein Array umgewandelt.
  3. Umwandlung in Zeilen:

    • Wenn du 20, 40, 200 in Zelle A4 hast, kannst du die Werte in einer neuen Zeile anzeigen lassen, indem du TRANSPOSE verwendest: =TRANSPOSE(SPLIT(A4, ",")).

Tipps für Profis

  • Dynamische Arrays: Nutze die Funktion ReDim Preserve in VBA, um Arrays dynamisch zu erstellen, wenn die Anzahl der Einträge variiert.
  • Fehlerbehandlung: Implementiere On Error Resume Next, um Fehler beim Zugriff auf Array-Elemente zu behandeln.
  • Leistungsoptimierung: Reduziere die Anzahl der Debug.Print Aufrufe in Schleifen, um die Ausführungszeit zu verkürzen.

FAQ: Häufige Fragen

1. Wie kann ich mit Komma getrennte Werte in Excel Spalten umwandeln?
Verwende die Funktion Text in Spalten unter dem Reiter Daten und wähle das Trennzeichen aus.

2. Kann ich mehrere Trennzeichen gleichzeitig verwenden?
Ja, indem du Replace in VBA nutzt, kannst du verschiedene Trennzeichen wie Komma und Semikolon ersetzen, bevor du die Werte in ein Array umwandelst.

3. Welche Excel-Version benötige ich für diese Methoden?
Der beschriebenen Code funktioniert in Excel 2003 und späteren Versionen.

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