Anzeige
Archiv - Navigation
1900to1904
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

Verständnisfrage Array Nachdimensioniere

Verständnisfrage Array Nachdimensioniere
03.10.2022 18:46:36
Andreas
Hallo alle zusammen,
eine kleine Verständnisfrage zu der Dimensionierung eines Arrays.

option explicit
DIM Array(1 to 10, 1 to 5)
lege ich die Größe des Arrays fest. Hier 10 Zeilen, 5 Spalten. Soweit so gut.
Wenn ich das Array aber dynamisch befüllen möchte zb in einer For Next Schleife,
bei der ich erst am Ende der ForNext Schleife die Anzahl der Zeilen habe...

For each objMember in ObjGroup.Member
i=i+1
array(i,1) = ...
array(i,2) = ...
array(i,3) = ...
redim array(1 to i, 1 to 5)
next i
Wie dimensioniere ich das Array richtig oder dimensioniere ich das nach ? Wenn ich ReDim in der For Next mache, löscht es mir die bereits durchlaufenen Datensätze.
Kann mir jemand das kurz erklären ? Vielen lieben Dank!

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
preserve das kann man nachlesen owt
03.10.2022 19:05:17
ralf_b
AW: preserve das kann man nachlesen owt
03.10.2022 19:24:41
Andreas
Habe ich gemacht, nur dann kommt immer Index außerhalb des gültigen Bereichs....
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 19:30:26
Alwin
Hallo Andreas,
das ist logisch, da Redim Preserve nur die letzte Dimension erweitern kann.
Wenn du ein zweidimensionales Array erweitern willst, brauchst du dazu ein zweites Array, welches du über 2 Schleifen füllst.
Gruß Uwe
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 19:39:49
Andreas
Die Spalten bleiben ja gleich, nur die Zeilen weiß ich vorher ja noch nicht.
kannst du mir sagen, was ich machen muss ?
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 19:55:28
Alwin
Ein kleines Beispiel:

Option Explicit
Sub ArrayErweitern()
Dim arrIn
Dim ArrTemp, i%, j%, Z%
Z = 4   'Erweiterung um 4 Zeilen
arrIn = Tabelle1.Cells().CurrentRegion.Value
ReDim ArrTemp(1 To UBound(arrIn, 1) + Z, 1 To UBound(arrIn, 2))
For i = 1 To UBound(arrIn, 1)
For j = 1 To UBound(arrIn, 2)
ArrTemp(i, j) = arrIn(i, j)
Next j
Next i
arrIn = ArrTemp
End Sub
Diese Prozedur erweitert die Zeilenzahl.
Beispieldatei: https://www.herber.de/bbs/user/155493.xlsm
Man kann dann zwecks weiterer Verwendung noch mit Erase ArrTemp das Array löschen.
Gruß Uwe
Anzeige
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 21:35:40
Andreas
Ich glaube, dass ich das jetzt so einigermaßen verstanden habe. Vielen Dank erstmal für die Ausführungen - Was ich jetzt noch mal fragen möchte: wenn ich die unbekannte Anzahl der Datensätze anstatt in der ersten Dimension, in der zweiten Dimension speichere, dann würde mir ein Array reichen?
Also: Redim preverse (1 to 5, 1 to i) wäre das möglich, ohne das arrtemp zu arbeiten ?
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 20:05:28
onur
Wenn du einen Bereich in ein Array packen willst, brauchst du die Grösse nicht im voraus zu dimensionieren.

Dim Arr
Arr=Range("A1:F50").Value

AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 20:20:52
Alwin
Hallo Onur,
er wollte den Weg wissen, wie man ein vordimensioniertes 2D Array erweitert - ist so von mir beispielhaft in einer Datei angelegt. Da habe ich der Einfachheit halber um ein paar Werte im Array stehen zu haben, den Zellbereich genommen.
Hier geht es um die Schleife um vorhandene Werte mitzunehmen.
Gruß Uwe
Anzeige
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 21:01:24
onur
Ja, vielleicht, weil er keinen anderen Weg kennt. "Die Spalten bleiben ja gleich, nur die Zeilen weiß ich vorher ja noch nicht" bedeutet für mich, dass es um einen Rangebereich geht, dessen Größe er nicht vorher kennt.
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 21:17:31
Alwin
Ja, den Satz hatte ich überlesen. Da weiß er jetzt wenigstens, wie man ein 2D Array redimensioniert und dass Preserve nur die letzte Dimension erweitert.
Gruß Uwe
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 21:55:12
onur
Du meinst wahrscheinlich, dass man mit "Redim" nur die letzte Dimension ändern kann und mit "Preserve" die alten Werte NICHT gelöscht werden. :)
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 22:38:11
GerdL
Moin
1. Redim um ein Array in der Größe zu ändern, wobei alle Daten des Arrays verloren sind.
2. Redim Preserve zum umdimensionieren wobei die Daten erhalten bleiben. Das geht aber nur, wenn du die letzte Dimension eines Arrays änderst
Der Hauwech mit Redim geht in allen Dimensionen.
Gruß Gerd
Anzeige
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 22:45:46
onur
Und wieso schreibst du MIR das?
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 22:53:56
GerdL
Du meinst wahrscheinlich, dass man mit "Redim" nur die letzte Dimension ändern kann
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 23:00:25
onur
Hast Recht, hab mich falsch ausgedrückt. Ich bezog mich nur auf seine Aussage, dass das nur das Wörtchen "Preserve" dafür sorgen würde....
".... dass Preserve nur die letzte Dimension erweitert."
AW: Verständnisfrage Array Nachdimensioniere
03.10.2022 23:10:28
Daniel
Hi
Besser als ständig zu redimensionieren ist vorher gleich auf die passende Größe dimensionieren.
Bei each objMember in ObjGroup.Member sollte sich diese mit ObjGroup.Member.Count ermitteln lassen.
Ansonsten gilt halt das bereits gesagte:
- nachdimensionieren ohne Datenverlust geht mit Redim Preserve, hierbei kann aber immer nur die letzte Dimension verändert werden (bei 2-d-Arrays die Spaltenanzahl).
- beim ersten Dim darf die Variable nur als allgemeines Variant oder Array ohne Angabe der Dimensionsgrößen angelegt werden. Die Array-Größe muss immer mit ReDim angegeben werden.
Gruß Daniel
Anzeige
AW: Verständnisfrage Array Nachdimensioniere
04.10.2022 10:51:06
Herbert_Grom
Hallo Daniel,
dein Vorschlag hört sich verlockend an, aber ich habe damit noch nicht gearbeitet. Wäre es sehr unverschämt von mir, dich um ein kleines Beispiel dafür zu bitten? Ich wage es aber trotzdem und bitte dich um ein solches. Vielen Dank im Voraus.
Servus
AW: Verständnisfrage Array Nachdimensioniere
04.10.2022 11:31:43
Daniel
Ist meine Erklärung so unverständlich, dass du nicht in der Lage bist, daraus selbstständig den Code abzuleiten?
AW: Ein Beispiel
04.10.2022 04:03:04
Sulprobil
Hallo,
Es gibt Fälle, in denen man die endgültige Größe des Arrays nicht im Vorhinein wissen kann oder in denen man die erste Dimension variabel gestalten muss.
Da helfen die ON ERROR GO TO Anweisung (nebst Prüfung ob die Arraygröße zu klein war) bzw. die Transponierung des Arrays.
Ein Beispiel:
https://www.sulprobil.com/sbminipivot_en/
Hinweis: Setz' mal lvdim auf 1 und gehe das Programm schrittweise durch.
Viele Grüße,
Bernd
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige