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

[VBA] Dreidimensionales Array in Tabellen ausgeben

[VBA] Dreidimensionales Array in Tabellen ausgeben
Thomas
Hallo,
ich habe ein Problem mit der Ausgabe eines Arrays in eine Excel-Tabelle.
Ausgangspunkt ist folgender:

With ThisWorkbook.Worksheets(1)
.Cells(4, l).Resize(UBound(array, 1), UBound(array, 2)).Value = array    End With

Das Array 'array' ist hierin zweidimensional, l wird durchlaufen von 1 bis 14, in 3er Schritten. Ausgegeben werden 5 mal 2er Wertepaare nebeneinander in einer Excel-Tabelle.
Also so:
0,000 -0,171 $ 0,000 -0,159 $ hier nochmal weitere drei Wertepaare
0,000 -0,170 $ 0,000 -0,159 $ ...
0,000 -0,170 $ 0,000 -0,159 $
0,000 -0,169 $ 0,000 -0,159 $
0,001 -0,167 $ 0,003 -0,157 $
0,007 -0,161 $ 0,013 -0,153 $
0,021 -0,156 $ 0,030 -0,147 $
und noch einige Werte so weiter
Nun soll das Array aber dreidimensional werden. Es sollen also mehrere "Tabellen" in dem Array gespeichert werden, nicht nur eine, wie in dem zweidimensionalen.
z.B.
Von
array(401, 2) zu
array(1, 401, 2) array(2, 308, 2) Z.B. zwei Tabellen. Dann würde oben genanntes Zahlenbeispiel die erste "Tabelle" in dem Array sein (array(1, 401, 2), ich jedoch in einem neuen sheet eine zweite "Tabelle", mit anderen Wertepaaren (array(2, 308, 2), auch noch ausgeben wollen.
Deshalb meine Frage: wie muss ich den obigen Code erweitern/ändern, damit ich eben kein zweidimensionales Array habe, sondern ein dreidimensionales, welches ich dann in unterschiedlichen sheets ausgeben kann?
Das Ganze ist jetzt vielleicht ein wenig unverständlich formuliert, aber anders kann ich's nicht erklären.

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: [VBA] Dreidimensionales Array in Tabellen ausgeben
06.10.2009 10:25:00
JogyB
Hi.
Als Ansatz: Kopier das mit einer Schleife in ein zweidimensionales Array und dann in die Tabelle.
Oder benutz eine Collection von zweidimensionalen Arrays anstelle des dreidimensionalen Arrays.
Wenn Du weitere Hilfe brauchst, dann melde Dich nochmal.
Gruss, Jogy
AW: [VBA] Dreidimensionales Array in Tabellen ausgeben
06.10.2009 10:46:26
Thomas
Hallo Jogy,
erstmal Danke für die Ansätze.
Nur fehlt mir dafür leider, im Moment, der programmiertechnische Ansatz.
Wenn du deine Vorschläge anhand eines kurzen Beispiel's erläutern könntest, wäre ich dir dankbar.
AW: [VBA] Dreidimensionales Array in Tabellen ausgeben
06.10.2009 11:20:59
JogyB
Hi.
Hier mal ein paar Beispiele, die oberen beiden sind für den Ansatz mit dem Kopieren, das untere zeigt die Collection. Letztere finde ich besser, da Du dann die einzelnen Arrays beliebig dimensionieren kannst.
' Liest ein Element eines 3-dimensionalen Arrays in einen 2-Dimensionalen aus
' TabNr gibt die Tabellennummer an, also das erste Element
' mit den Variablen oGrenze1 und oGrenze2, kannst Du die Obergrenzen einschränken
' 1 und 2 bezieht sich auf die Dimensionen des Zielarrays
Function copy3DimTo2Dim(quellArr() As Variant, ByVal tabNr As Long, _
Optional ByVal oGrenze1 As Long, Optional ByVal oGrenze2 As Long) As Variant
Dim zielArr
Dim i As Long
Dim k As Long
' Obergrenzen aus Array, falls nicht angegeben
If oGrenze1 = 0 Then oGrenze1 = UBound(quellArr, 2)
If oGrenze2 = 0 Then oGrenze2 = UBound(quellArr, 3)
ReDim zielArr(LBound(quellArr, 2) To oGrenze1, LBound(quellArr, 3) To oGrenze2)
For i = LBound(quellArr, 2) To oGrenze1
For k = LBound(quellArr, 3) To oGrenze2
zielArr(i, k) = quellArr(tabNr, i, k)
Next
Next
copy3DimTo2Dim = zielArr
End Function
' Anwendungsbeispiel für copy3DimTo2Dim
Sub testCopy()
Dim i As Long
Dim j As Long
Dim k As Long
Dim myArr(1 To 5, 1 To 5, 1 To 5)
Dim tempArr
For i = 1 To 5
For j = 1 To 5
For k = 1 To 5
myArr(i, j, k) = i & j & k
Next
Next
Next
' Liest das 5. Element aus, die Zahl kannst Du anpassen
tempArr = copy3DimTo2Dim(myArr, 5)
' Zielsheet leeren, sonst überschneidet sich vielleicht was
ActiveSheet.Cells.ClearContents
' Werte in zielsheet schreiben
ActiveSheet.Cells(1, 1).Resize(UBound(tempArr, 1), UBound(tempArr, 2)).Value = tempArr
End Sub
' Hier das ganze mit Collection
Sub testCollection()
Dim myCol As New Collection
Dim i As Long
Dim j As Long
Dim k As Long
Dim myArr()
Dim tempArr
For i = 1 To 5
' Hier kannst Du jeden Array beliebig dimensionieren
ReDim myArr(1 To i + 1, 1 To 10 - i)
For j = 1 To i + 1
For k = 1 To 10 - i
myArr(j, k) = i & j & k
Next
Next
' Fügt das in die Collection ein
myCol.Add myArr
Next
' Liest das 2. Element aus, die Zahl kannst Du anpassen
tempArr = myCol.Item(2)
' Zielsheet leeren, sonst überschneidet sich vielleicht was
ActiveSheet.Cells.ClearContents
' Werte in zielsheet schreiben
ActiveSheet.Cells(1, 1).Resize(UBound(tempArr, 1), UBound(tempArr, 2)).Value = tempArr
End Sub
Gruss, Jogy
Anzeige
AW: [VBA] Dreidimensionales Array in Tabellen ausgeben
07.10.2009 16:01:33
Thomas
Vielen Dank, hat wunderbar funktioniert!

321 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige