Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1132to1136
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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
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
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
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

180 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige