>> Ich weiss beim besten Willen nicht was du meinst?! Die Elemente sind dem Array richtig zugeordnet,
Unter der Bedingung "[...] das Array auf einmal ausgeben [...]" Ist es dies nun halt nicht.
1 | Sheets( "Ergebnis" ).Range( "A1:C6" ) = Matrix()
|
Genau davon rede ich. Matrix ist ein verzweigtes Array und kein zweidim. (allgm. multdimensionales) Array, wie es Excel numal erwartet.
Deshalb funktioniert auch...
Sheets( "Ergebnis" ).Range( "A17:C22" ) = Matrix(2)
Sheets( "Ergebnis" ).Range( "A17:C22" ) = Matrix(2) (1,2)
... weil das dann zweidim. (multidim.) Arrays liefert.
>> Befüllt man das selbe konstrukt mit 2 for Schleifen einzeln mit den Cells [, dann] dauert [es] zu lange
Auch logisch, weil hierbei jedesmal ein Feuerwerk an (verborgenen) Operationen im Hintergrund losgetreten wird.
Genau darum willst du ja den Weg über Arrays neben, da fallen nämlich genau diese weg; Schleifen hin oder her.
>> Copy Paste der einzelnen Ranges ist hier leider viel langsamer, sind zig tausende Zeilen (mit hunderten Formeln), mehr Varianten kenne ich leider nicht die passen bzw anscheinend gar keine...
Genau hier greift z.B. eine der Mechanismen um die Laufzeit zu minimieren. Man deaktiviert die Neuberechnung. Nachdem alles an seinem Platz ist, aktiviert man sie wieder wodurch dann alles mit einem male berechnet wird, anstatt mehrere male doppelt und drölfzigfach wärend der Kopiererei zuvor.
Weiterhin bringt es auch enorm viel die Bildschirmaktualisierung vorübergehend zu deaktivieren.
Nochmal: Wenn du unabdingbar alles auf einmal kopieren willst, dann wirst du vorab ermitteln müssen wieviel Speicher (größe deiner zweidimensionalen Ausgabematrix) du benötigst. Wenn du also 50 Dateien hast, aus denen jeweils der Bereich A1:C1 (also 1x3) übernommen werden soll, dann brauchst du eine Ausgabematrix von 50x1x3 -> 50x3. In die schaufelst du dann die Daten hinein und dafür brauchst du dann final wieder eine Schleife - ganz ohne geht nicht.
Gruß
|