Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

3-dimensionales Array

Forumthread: 3-dimensionales Array

3-dimensionales Array
24.11.2015 10:33:01
Sascha
Hallo!
Wie kann ich ein 3-Dimensionales-Array deklarieren mit unbestimmter Größe?
Also ich möchte im Prinzip eines haben, was die Größe individuell erweitert, je nachdem was ich speicher... Wenn das nicht geht muss ich es halt anders lösen.
Dim array(,,) As String
array(0,0,0) = 1.0
array(0,0,1) = 1.1
etc....

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 3-dimensionales Array
24.11.2015 10:54:33
fcs
Hallo Sascha,
mit ReDim oder Redim Preserve kannst du Arrays dynmisch anpassen.
ReDim erzeugt ein Array mit fixer Größe in den Dimensionen.
Redim Preserve ist dabei die letzte Dimension variabel.
Gruß
Franz
Sub Test()
Dim arrText() As String, intK As Integer
intK = -1
intK = intK + 1
ReDim Preserve arrText(0 To 3, 0 To 1, 0 To intK)
arrText(0, 0, intK) = 1#
arrText(1, 0, intK) = 1.1
arrText(2, 0, intK) = 3.3
arrText(3, 0, intK) = 4
arrText(0, 1, intK) = 5
arrText(1, 1, intK) = 6
arrText(2, 1, intK) = 8
arrText(3, 1, intK) = 7
intK = intK + 1
ReDim Preserve arrText(0 To 3, 0 To 2, 0 To intK)
arrText(0, 0, intK) = 4
arrText(1, 0, intK) = 3.2
'usw.
End Sub

Anzeige
AW: 3-dimensionales Array
24.11.2015 12:09:25
Rudi
Hallo,
würde ich in ein Dictionary packen.
Sub yyy()
Dim x As Integer, y As Integer, z As Integer
Dim objArray As Object
Const sDelim As String = "|"
Set objArray = CreateObject("Scripting.Dictionary")
For z = 1 To 71
For y = 1 To 63
For x = 1 To 30
objArray(Join(Array(x, y, z), sDelim)) = Rnd
Next x
Next y
Next z
'Beispielausgabe
MsgBox objArray(Join(Array(21, 52, 32), sDelim))
End Sub

Gruß
Rudi

Anzeige
Und noch eine hochvariable Lösung, ...
24.11.2015 17:09:27
Luc:-?
…Sascha;
nimm einen Variant mit einem Array und zwar als Arrays in einem Array organisiert, das gleiche Prinzip wie bei ParamArray als variable Parameter­Eingabe und Folgendem: varAiA = Array(Array(Array(1, 2, 3), Array(4, 5, 6)), Array(Array(7, 8), Array(8, 0)))
Ein Variant wird als Vektor ReDimensioniert und seine Elemente ebenfalls mit Vektoren gefüllt, die genauso vorbereitet wdn. D.h., zuerst muss die 3.Ebene fertig sein, die ebenfalls aus Vektoren besteht. Dann diese in die Elemente eines Vektors für die 2.Ebene übertragen. Das dann für jedes Element des Vektors der 1.Ebene ebenfalls tun.
Alle Vektoren aller Ebenen sind dann 1dimensional. Ein Einzelwert wird dann so identifiziert:
varAiA(indexEbene1)(indexEbene2)(indexEbene3)
Mit varAiA(indexEbene1)(indexEbene2) erhält man den jeweiligen GesamtVektor mit allen seinen Elementen und mit varAiA(indexEbene1) den jeweils nachgeordneten Array-Variant.
Vorteil: Jede Ebene kann ReDimensioniert, identifiziert und separat verwendet wdn.
Gruß, Luc :-?
Besser informiert mit …
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

3-Dimensionales Array in VBA


Schritt-für-Schritt-Anleitung

Um ein 3-dimensionales Array in VBA zu deklarieren und dynamisch anzupassen, folge diesen Schritten:

  1. Deklaration des Arrays: Verwende Dim, um ein leeres Array zu deklarieren.

    Dim arrText() As String
  2. Anpassung der Größe: Mit ReDim kannst du die Größe des Arrays festlegen. Falls du die letzte Dimension später anpassen möchtest, nutze ReDim Preserve.

    ReDim arrText(0 To 3, 0 To 1, 0 To 0)
  3. Werte zuweisen: Weise Werte dem Array zu, indem du den Index angibst.

    arrText(0, 0, 0) = "Wert1"
  4. Größe anpassen: Falls du ein neues Element hinzufügen möchtest, verwende ReDim Preserve für die letzte Dimension.

    ReDim Preserve arrText(0 To 3, 0 To 1, 0 To 1)
    arrText(0, 0, 1) = "Wert2"

Häufige Fehler und Lösungen

  • Fehler: "Array nicht dimensioniert": Dieser Fehler tritt auf, wenn du versuchst, auf ein Array zuzugreifen, das nicht dimensioniert wurde. Stelle sicher, dass du das Array mit ReDim initialisiert hast.

  • Lösung: Verwendung von ReDim Preserve: Wenn du die Größe eines bereits dimensionierten Arrays ändern möchtest, achte darauf, nur die letzte Dimension mit ReDim Preserve zu ändern.


Alternative Methoden

Es gibt verschiedene Möglichkeiten, ein 3-dimensionales Array in VBA zu verwenden:

  1. Verwendung von Dictionary: Anstelle eines Arrays kannst du ein Dictionary verwenden, um Daten in mehreren Dimensionen zu speichern.

    Dim objArray As Object
    Set objArray = CreateObject("Scripting.Dictionary")
  2. Variant Arrays: Verwende ein Variant, um ein Array von Arrays zu erstellen. Dies ermöglicht eine flexible Handhabung von Dimensionen.

    Dim varAiA As Variant
    varAiA = Array(Array(Array(1, 2, 3), Array(4, 5, 6)), Array(Array(7, 8), Array(8, 0)))

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du ein 3-dimensionales Array in VBA nutzen kannst:

  1. Zufallszahlen in einem 3D-Array:

    Sub Beispiel3DArray()
       Dim arr(0 To 3, 0 To 1, 0 To 2) As Double
       Dim x As Integer, y As Integer, z As Integer
       For z = 0 To 2
           For y = 0 To 1
               For x = 0 To 3
                   arr(x, y, z) = Rnd
               Next x
           Next y
       Next z
    End Sub
  2. Zugriff auf Elemente:

    MsgBox arr(2, 1, 0) ' Zugriff auf ein bestimmtes Element im Array

Tipps für Profis

  • Verwende Option Base 1: Standardmäßig beginnt VBA die Indizes bei 0. Setze Option Base 1 zu Beginn deines Moduls, um die Indizes bei 1 beginnen zu lassen, was die Lesbarkeit erhöhen kann.

  • Maximiere die Effizienz: Achte darauf, die Dimensionen deines 3D-Arrays nicht unnötig groß zu machen. Überlege, ob du nur die Dimensionen benötigst, die du tatsächlich verwenden möchtest.


FAQ: Häufige Fragen

1. Wie deklariere ich ein 3-dimensionales Array in VBA?
Um ein 3-dimensionales Array in VBA zu deklarieren, verwende die Syntax:

Dim arr(,,) As String

2. Wie kann ich die Größe eines Arrays dynamisch anpassen?
Du kannst die Größe eines Arrays mit ReDim ändern. Um die bestehende Daten beizubehalten, verwende ReDim Preserve.

3. Was ist der Unterschied zwischen ReDim und ReDim Preserve?
ReDim erstellt ein neues Array mit einer festen Größe, während ReDim Preserve die Werte des Arrays in der letzten Dimension beibehält.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige