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

Forumthread: [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.
Anzeige

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.
Anzeige
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!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dreidimensionales Array in Excel-Tabellen ausgeben


Schritt-für-Schritt-Anleitung

Um ein dreidimensionales Array in einer Excel-Tabelle auszugeben, kannst du den folgenden Ansatz verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Deklaration des Arrays: Zuerst musst du ein dreidimensionales Array in VBA deklarieren. Dies erfolgt in der Regel in einem Modul:

    Dim myArr(1 To 5, 1 To 5, 1 To 5) As Variant
  2. Befüllen des Arrays: Fülle das Array mit Werten:

    Dim i As Long, j As Long, k As Long
    For i = 1 To 5
       For j = 1 To 5
           For k = 1 To 5
               myArr(i, j, k) = i & j & k
           Next k
       Next j
    Next i
  3. Daten in eine Tabelle schreiben: Verwende eine Funktion, um das dreidimensionale Array in ein zwei-dimensionales Array zu konvertieren und dann in die Excel-Tabelle zu schreiben. Hier ist ein Beispiel:

    Sub WriteArrayToSheet()
       Dim tempArr As Variant
       tempArr = copy3DimTo2Dim(myArr, 1) ' Hier wird das erste "Tab" ausgewählt
    
       With ThisWorkbook.Worksheets(1)
           .Cells(1, 1).Resize(UBound(tempArr, 1), UBound(tempArr, 2)).Value = tempArr
       End With
    End Sub
  4. Funktion zur Konvertierung: Stelle sicher, dass die Funktion copy3DimTo2Dim in deinem Modul vorhanden ist, um das vba array ausgeben zu ermöglichen.


Häufige Fehler und Lösungen

  • Fehler: "Array Index out of Bounds"
    Wenn du diesen Fehler erhältst, überprüfe die Indizes, die du beim Zugriff auf das Array verwendest. Stelle sicher, dass du die richtigen Dimensionen und Grenzen verwendest.

  • Fehler: "Typ nicht übereinstimmend"
    Dies geschieht häufig, wenn du versuchst, verschiedene Datentypen in dein Array zu speichern. Achte darauf, dass der Datentyp des Arrays korrekt definiert ist.


Alternative Methoden

Statt ein dreidimensionales Array zu verwenden, kannst du auch eine VBA-Collection von Arrays nutzen. Diese Methode ist flexibler und ermöglicht es dir, Arrays beliebig zu dimensionieren.

Hier ein Beispiel, wie man eine VBA-Collection of Arrays verwendet:

Sub testCollection()
    Dim myCol As New Collection
    Dim myArr() As Variant
    Dim i As Long, j As Long, k As Long

    For i = 1 To 5
        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 k
        Next j
        myCol.Add myArr
    Next i
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen, ein vba mehrdimensionales Array füllen zu können:

  1. Daten für zwei Tabellen speichern:

    Dim myArr(1 To 2, 1 To 401, 1 To 2) As Variant
    ' Fülle hier die Werte für beiden Tabellen
  2. Daten aus einer Collection ausgeben:

    Dim tempArr As Variant
    tempArr = myCol.Item(1) ' Zugriff auf das erste Element der Collection

Tipps für Profis

  • Nutze Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Verwende Kommentare in deinem Code, um die Lesbarkeit zu verbessern und um den Zweck jeder Funktion zu erklären.
  • Experimentiere mit der Größe und Dimension deines VBA-Arrays, um zu verstehen, wie du es am besten an deine Bedürfnisse anpassen kannst.

FAQ: Häufige Fragen

1. Wie dimensioniere ich ein VBA-Array?
Du kannst ein VBA-Array mit ReDim dimensionieren. Beispiel: ReDim myArr(1 To 10, 1 To 5).

2. Was ist der Unterschied zwischen einem eindimensionalen und einem dreidimensionalen Array?
Ein eindimensionales Array hat eine einzige Dimension, während ein dreidimensionales Array drei Dimensionen hat, was bedeutet, dass es mehrere Ebenen oder "Tabellen" speichern kann.

3. Wie gebe ich ein Array in einer Excel-Tabelle aus?
Verwende die .Value-Eigenschaft, um ein Array in eine Excel-Zelle zu schreiben, wie im obigen Beispiel gezeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige