Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1832to1836
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; mehrdimensionalem Array

ReDim; mehrdimensionalem Array
27.05.2021 13:42:58
JoWE
Hallo zusammen,
ich versuche mich gerade an Arrays um irgendwann auch Dictionary und/oder Collections (vllt. sortiert und ohne Duplikate) kennen zu lernen.
Zu Beginn stoße auf die Frage, wie das ReDim-Statement einzusetzen ist um ein dynamisches Array zu füllen.
Hier mein (ev tl. zu verbesserndes) Beispiel, bei dem ich Hilfe benötige:
Wie genau ändere ich den Code um mein Datenfeld dynamisch zu machen?

Sub my3DArray()
Dim myArr(25, 25, 25) As String
Dim a As Long, b As Long, c As Long
'Einlesen
For a = 1 To 25
myArr(a, 0, 0) = Cells(a, 1)
For b = 1 To 25
myArr(a, b, 0) = Cells(a, 2)
For c = 1 To 25
myArr(a, b, c) = Cells(a, 3)
Next
Next
Next
'Ausgabe
For e = LBound(myArr) To UBound(myArr) - 1
Cells(e + 1, 5) = myArr(e + 1, 0, 0)
Cells(e + 1, 6) = myArr(e + 1, 1, 0)
Cells(e + 1, 7) = myArr(e + 1, 2, 1)
Next
End Sub
Gruß
Jochen

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ReDim; mehrdimensionalem Array
27.05.2021 13:47:32
Daniel
Hi
Was verstehst du in diesem Fall unter "dynamisch"?
Gruß Daniel
AW: ReDim; mehrdimensionalem Array
27.05.2021 13:59:04
JoWE
im Beispiel schreibe ich die Daten aus den Spalten A, B und C und dort jeweils von Zeile 1 bis Zeil 25 in das Array.
Was aber wenn sich die Anzahl der Zeilen eben nicht von vornherein festlegen will.
Also hier statt "Dim myArr(25, 25, 25) As String" dynamisch werden will.
AW: ReDim; mehrdimensionalem Array
27.05.2021 14:03:15
EtoPHG
Hallo Jowe,
In einem mehrdimensionalen Array (wie er bei dir vorliegt) kann nur der letzte Index-Wert über eine ReDim Anweisung verändert werden!
Also in deinem Fall nur der deiner Spalte C.
Gruess Hansueli
AW: ReDim; mehrdimensionalem Array
27.05.2021 14:14:21
JoWE
Grüß' Dich,
und erst einmal danke für die ausführlichen Hinweise :-)
Wenn ich vor das Einlesen dies setze:
"myRow = Cells(Rows.Count, 1).End(xlUp).Row"
und innerhalb meines Codes die "25" jeweils durch "myRow" ersetze
würde das dann so ok sein?
Jochen
Anzeige
AW: ReDim; mehrdimensionalem Array
27.05.2021 14:47:35
Daniel
Hi
Kannst du machen so wie dich das beschrieben habe.
Der Hinweis von Hansueli bezieht sich auf Redim Preserve, also auf das Verändern der Größe eines bereits dimensionierten und befüllten Arrays ohne Datenverlust.
Gruß Daniel
AW: Ok erst einmal, Danke Euch
27.05.2021 14:44:26
JoWE
AW: Ok erst einmal, Danke Euch
AW: ReDim; mehrdimensionalem Array
27.05.2021 14:21:49
Daniel
Hi
Zunächst einmal das Array nur als einfaches Variante deklarieren und sobald die notwendigen Dimensionierungen bekannt sind, diese mit Redim nachträglich dimensionieren.

dim Arr
Dim x as long, y as long, z as long
x = 25
y = 26
z = 27
Redim Arr(x, y, z)
Mit Redim kann man die Arraygröße auch mehrfach verändern.
Bei nachträglicher redimensionierung werden vorhandene Inhalte gelöscht.
Will man die Array-Größe nachträglich ändern ohne dass die Inhalte gelöscht werden, kann man Redim Preseve verwenden. Allerdings kann man damit nur die letzte Dimension verändern, die anderen Dimensionen müssen gleich bleiben.
Gruß Daniel
Anzeige
AW: Ok erst einmal, Danke Euch
27.05.2021 14:44:04
JoWE
AW: ReDim; mehrdimensionalem Array
27.05.2021 17:50:06
onur
Was du da machst ist Murks, da du (bei 25x3 Werten) nur ein zweidimensionales Array (Dim Arr(24,2) für 25 Zeilen und 3 Spalten) brauchst - oder aber auch DREI eindimensionale Arrays (jede Spalte ein Array).
Du jedoch legst ein DREI-dimensionales (für jede Spalte eine neue Dimension!) Array für 25x25x25=15625 Werte an.
AW: ReDim; mehrdimensionalem Array
27.05.2021 18:08:15
JoWE
Hallo Onur,
danke für den Hinweis, bin da offenbar überfordert und/oder auf dem Holzweg,
Würdest Du mir vielleicht einen korrekten Code für mein Beispiel machen?
Gruß
Jochen
AW: ReDim; mehrdimensionalem Array
27.05.2021 18:45:42
onur
Wenn du doch nur die Werte von Spaölte A-C Zeile 1-25 speichern willst, reicht

MyArray=Range("A1:C25")
Wenn die letzte Zeile später z.B. 30 ist, machst du einfach:

MyArray=Range("A1:C30")

Anzeige
AW: ReDim; mehrdimensionalem Array
27.05.2021 18:49:44
onur
Da brauchst du auch nix als Array zu dimensionieren - einfach mit

Dim  MyArray
als Variant deklarieren
AW: ReDim; mehrdimensionalem Array
27.05.2021 19:07:25
JoWE
ok kapiert, daher einstweilen danke dafür.
Ich brauche weitergehende Informationen.
Werde mir passende Literatur besorgen.
Gruß
Jochen
AW: ReDim; mehrdimensionalem Array
27.05.2021 19:02:49
onur
Nochmal zu Dimensionen eines Arrays:
Wenn du die Werte von Spalte A Zeile 1-10 speichern willst, brauchst du nur EINE Dimension (für die Zeilennummer) - 10 Werte.
Wenn du die Werte von Spalte A bis C, Zeile 1-10 speichern willst, brauchst du eine zweite Dimension für die Spaltennummer - 30 Werte.
Wenn du aber die Werte von Spalte A bis C, Zeile 1-10 auf Blatt 1 bis Blatt 10 speichern willst, brauchst du eine dritte Dimension für die Blattnummer - 300 Werte.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige