unregelmäßiges Array in VBA

Hallo zusammen,

ich möchte in VBA ein unregelmäßiges Array benutzen, komme da aber irgendwie nicht weiter.

Das Array soll je „Zeile“ eine unterschiedliche Anzahl von „Spalten“ haben können. z. B. so

5, 2, 3, 4, 8
2
7, 5, 6, 0, 0, 5
2, 6, 5

Falls das mit Arrays nicht geht, hat vielleicht jemand eine Idee, wie man das mit Dictionarys oder ArrayList oder so nachbauen kann?

Vielen Dank für die Hilfe!

Hallo Namenloser,

du könntest z.B. so etwas machen:

Option Base 1

Sub feld()
 Dim feld(4) As Variant

 feld(1) = Array(5, 2, 3, 4, 8)
 feld(2) = Array(2)
 feld(3) = Array(7, 5, 6, 0, 0, 5)
 feld(4) = Array(2, 6, 5)
 MsgBox feld(3)(2)
End Sub

Gruß, Andreas

Hallo Andreas,

ja, die Idee sieht schon mal ganz passend aus.

Sorry, habe ich vorhin vergesen zu sagen, aber die Anzahl der Zeilen und der Spalten in den Zeilen sowie die Werte sind erst zur Laufzeit bekannt. Ich kann also die Dimensionen nicht fest im Code angeben.

Hast du dazu auch noch eine Idee?

Sorry, habe ich vorhin vergesen zu sagen, aber die Anzahl der
Zeilen und der Spalten in den Zeilen sowie die Werte sind erst
zur Laufzeit bekannt. Ich kann also die Dimensionen nicht fest
im Code angeben.

hallo Blauer :smile:,

wo stehen denn die daten, in einer Exceltablle oder sonstwo?

Probiersmal mit Redim…

Gruß
Reinhard

Lösung: unregelmäßiges Array in VBA
Hallo nochmal!

Ich habe mit dem Vorschlag von Andreas verändert und eine Lösung gefunden.

einfach ein array von typ Object definieren und später mit redim an die benötigte Größe anpassen.

Dim zeilen() as object


redim zeilen(1 to anzZeilen)

Dann dem Array Objekte vom Typ ArrayList hinzufügen.

for i = 1 to ubound(zeilen)
set zeilen(i) = createobject(„system.collections.arraylist“)
next i

jetzt kann man zeilenweise die jeweilige ArrayList füllen:

z.B in Zeile 2 an Position 1 (Position = Reihenfolge des Anfügens) den Wert 3 einfügen:

zeilen(2).add 3

und anschießend auch wieder abfragen

z. B.
debug.print zeilen(2).item(1)

Ist zwar kein echtes Array mehr, aber für meinen Code komme ich damit klar. Scheinbar alles etwas umständlich in VBA. (und ich wollte nur mal schnell was testen…)

Danke für die Unterstützung!