Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1776to1780
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

ReDim von Array in Array

ReDim von Array in Array
18.08.2020 18:24:26
Array
Hallo Excel und VBA Freunde,
ich habe mich im Rahmen eines neue Codes heute mit der Verschachtelung von Arrays in Array beschäftigt. Ich möchte in einem Array, welches als y(1 to 2, 1 to 2) deklariert ist, in der ersten Spalte einen Zähler speichern und in der zweiten Spalte Objekte, welche in ihrer Anzahl unterschiedlich sein können, wiederum in einem Array speichern. Hierbei wird mir im angehängten Beispielcode die Zeile
ReDim Preserve y(1, 2) (0 to b)
Rot markiert, obwohl meines Erachtens alles korrekt ist.
Weiß hier jemand Rat? Kann ich Arrays in Arrays überhaupt flexibel erweitern?
https://www.herber.de/bbs/user/139698.xlsm
Vielen Dank für Eure Aufmerksamkeit und Expertise!
Beste Grüße, Andreas Hanisch

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ReDim von Array in Array
18.08.2020 18:32:41
Array
Hallo Andreas,
du hast kein Array im Array sondern ein zweidimensionales Array. Daher:
ReDim Preserve y(1, 2, 0 To b)

Gruß
Nepumuk
AW: ReDim von Array in Array
18.08.2020 18:36:34
Array
Hallo Nepumuk,
Du hast mich gerettet! Der Wahnsinn! Das kann noch nicht sein, dass ich so vernagelt war... Den Wald vor lauter Bäumen nicht gesehen...
Deine schnelle Antwort wird nun dazu führen, dass ich heute beruhigt(er) in den Tagesausklang gehen kann. Vielen, vielen Dank!
Beste Grüße aus dem Brandenburgischen, Andreas Hanisch
Und danach hättest du auf y(1,2) 1 3dArray, ...
19.08.2020 03:36:37
Luc:?
…Andreas,
was aber nicht fktionieren wird, weil du y bereits als (1 To 2, 1 To 2) dimensioniert hattest, (1, 2, 0 To b) aber (0 To 1, 0 To 2, 0 To b) bedeutet und damit nicht nur die erlaubte letzte Dimension, sondern auch vordere redimmt würden, denn das Redimmen bezieht sich hier stets auf das ganze y. Du hättest also auf (1, 2) tatsächlich ein sog Array in einem Array oder besser einen 2stufigen Tensor zu erzeugen, dessen 1.Stufe aus einer Matrix (1 To 2, 1 To 2) besteht, deren Element (1, 2) einen Kovektor (0 To b) → (b) aufnehmen soll. Dazu muss nichts redimmt wdn, sondern es reicht, dass y den DatenTyp Variant hat. Allerdings entsteht so ein irreguläres 3d-Konstrukt, wenn nicht alle Elemente der Matrix gleichlange und gleichgerichtete Tensoren enthalten. Auf ein Blatt in Gänze ausgeben kann man so etwas ohnehin nicht. Da gibt's aber andere Methoden, zu denen ich mich schon früher geäußert hatte und es demnächst wieder tun werde.
Eine generelle Redimensionierung deines y auf 3d müsste übrigens so aussehen: y(1 To 2, 1 To 2, b), was ich aber nicht so toll finde, weil der 1.Index in den Dimensionen unterschiedlichen Wert (1 bzw 0) hat und diese n-dimensionalen VBA-Arrays recht unpraktisch sein können.
Morhn aus BB, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
Nichtsdestotrotz Durchblick verbessern mit …

Anzeige
AW: Und danach hättest du auf y(1,2) 1 3dArray, ...
19.08.2020 16:33:03
Andreas
Hallo Luc:? ,
vielen Dank für Deine ausführliche Antwort. In der Tat stieß ich heute in dem eigentlichen Code, aufgrund dessen ich auf das ReDim Problem aufmerksam wurde, und den Post schrieb, auf die von Dir beschriebenen, fortgesetzten Probleme.
Ich habe mich nun dazu entschieden in jeder Zeile der dafür vorgesehenen Array Spalte eine Collection zu setzen. Diese wird entweder von Grund auf, nach einem Set Nothing, befüllt oder aus dem Array über Set angewiesen und erweitert. Das funktioniert.
Deine kenntnisreichen Erläuterungen zur Dimensionierung werde ich mir noch in Ruhe zu Gemüte führen müssen, um es ansatzweise zu verstehen.
Für mein aktuelles Problem und das weitergehende Verständnis von VBA, und Array im Besonderen, habt ihr beide mir sehr geholfen. Es ist für mich immer wieder erstaunlich und erfreulich zugleich, zu sehen, was für helle Köpfe hier im Herber Forum unterwegs sind! Wenn ich im Alltag von der Schönheit und Effektivität einer VBA Prozedur, und eben manchmal auch den damit verbundenen inhaltlichen Problemen spreche, versteht das kaum einer. Aber hier ist man sofort unter Gleichgesinnten.
Danke Dir & Euch dafür!
Allen Beteiligten und Freunden dieses Forums wünsche ich eine gute Restwoche und erholsames Wochenende.
Viele Grüße, Andreas Hanisch
PS: Luc:? 03:36 Uhr ist doch noch tiefste Nacht ;)
Anzeige
Eben, produktiv! ;-) orT
25.08.2020 22:52:39
Luc:?
Link folgt hier demnächst!
Luc :-?
AW: ReDim von Array in Array
19.08.2020 17:17:12
Array
HI
kann man machen.
ein Einzelwert eines Mehrdimensionalen Arrays kann wiederum ein Array sein, also in etwa so:
y(1, 2) = Array(0, 1, 2, 3, 4)
wenn du jetzt von diesem Array die Dimensionierung ändern willst, musst du es zunächst aus dem Gesamt-Array herausholen, dann verändern und danach wieder zurückschreiben:
x = y(1, 2)
redim preserve x(0 to 5)
x(5) = 5
y(1, 2) = x
ob das auch eleganter geht, weiß ich nicht aber so sollte es funktionieren.
Gruß Daniel
Anzeige
AW: ReDim von Array in Array
20.08.2020 13:57:39
Array
Hallo Daniel,
vielen Dank für Deine Antwort. Der Weg über ein temporär rauszulösendes Array scheint auf alle Fälle praktikabel zu sein. Ich werde das einmal testen. Und wenn ich es einzeilig schreibe, dann bleibt es auch recht kompakt.
Viele Grüße, Andreas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige