HERBERS Excel-Forum - das Archiv
3-dimensionales Array
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....

AW: 3-dimensionales Array
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

AW: 3-dimensionales Array
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

Und noch eine hochvariable Lösung, ...
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 …

3-dimensionales Array
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....

AW: 3-dimensionales Array
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

AW: 3-dimensionales Array
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

Und noch eine hochvariable Lösung, ...
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 …

Bewerten Sie hier bitte das Excel-Portal