Microsoft Excel

Herbers Excel/VBA-Archiv

Dreidimensionales Array auslesen

Betrifft: Dreidimensionales Array auslesen von: Tobias S.
Geschrieben am: 06.11.2012 17:04:27

Hallo!

Ich weiss, man findet über google was dazu, aber irgendwie verstehe ich es nicht.
Ich habe 10 Abteilungen, die je 8 Produkte herstellen für die es je 6 Kennziffern gibt.

Die Abteilungesnamen hatte ich vorher in einem eindimensionalen Array gespeichert.

Was ich gemacht habe:

for k = LBound(Abteilungsname) to UBound(Abteilungsname)
for x = 1 to Produktanzahl
for y = 1 to Kennziffern
B(k,x,y) = cells(y,x).value
next y
next x
next k

Jetzt suche ich eine Möglichkeit die Werte wieder auszulesen. Erst den Werteblock für Abteilung1 in ein Sheet, darunter den Block für Abteilung2 usw.

Wäre sehr nett, wenn mir da jemand helfen könnte.

VG
Tobi!

  

Betrifft: AW: Dreidimensionales Array auslesen von: Ulf
Geschrieben am: 06.11.2012 17:16:49

Hallo,
setz doch y,x,k wieder auf Werte
oder auch nur
msgbox B(1,1,1)

Ulf


  

Betrifft: Das ist nicht so einfach, weil man einen Index ... von: Luc:-?
Geschrieben am: 06.11.2012 22:05:43

…nicht einfach weglassen kann, Tobi;
du müsstest also zum Auslesen den gleichen Aufwand treiben wie zum Bilden des Datenfeldes (DataArray). Du hättest eine andere Art von Datenfeld bilden sollen, nämlich einen Vektor aus Matrizen, also etwa so…

Dim avErg, xk As Variant
Redim avErg(UBound(Abteilungsname) - LBound(Abteilungsname))
For Each xk In Abteilungsname
    For x = 1 To Produktanzahl
        For y = 1 To Kennziffern
            B(x, y) = Cells(y, x)
        Next y
    Next x
    avErg(k) = B: k = k + 1
Next xk
Natürlich könnte man die x/y-Schleifen auch noch auf For Each umstellen oder das Ganze ggf noch etwas einfacher (und schneller) gestalten, aber so tief wollte ich mich da jetzt nicht hineindenken, zumal du ja offensichtlich auch transformierst, was man wohl auch mit WorksheetFunction.Transpose machen könnte. Ansonsten gibt's bei For Each auch Unterschiede in der Abarbeitungsreihenfolge von Zellbereichen und Datenfeldern.
Wichtig ist hier erst mal nur der Unterschied zwischen beiden DFeldTypen. Bei diesem hier muss ein einzelnes Element mit (k)(x, y) angesprochen wdn. Dadurch kannst du den Index k von den anderen isolieren → mit avErg(k) erhältst du also eine ganze Matrix, die du wie gewünscht in das TabBlatt übertragen kannst.
Gruß Luc :-?


  

Betrifft: AW: Das ist nicht so einfach, weil man einen Index ... von: Tobias S.
Geschrieben am: 07.11.2012 09:32:40

Super, danke dir Luc!

du bist eine große Hilfe!!

VG

Tobi!


  

Betrifft: Bitte sehr, gern geschehen! Gruß owT von: Luc:-?
Geschrieben am: 07.11.2012 16:10:28

:-?


  

Betrifft: AW: Dreidimensionales Array auslesen von: Tobias S.
Geschrieben am: 07.11.2012 12:46:07

Eine nicht ganz so elegante Lösung, aber auch möglich in meinem Fall war:
.Cells(x + 10 * k, y + 1) = B(k, x, y)
Man muss danach aber noch in dem Datenblatt ein paar leere Zeilen löschen.

beste,

Tobi!


 

Beiträge aus den Excel-Beispielen zum Thema "Dreidimensionales Array auslesen"