Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1576to1580
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

Code Optimierung mit Array?

Code Optimierung mit Array?
31.08.2017 17:33:56
Guggus
Hallo Zusammen
Ich habe neulich einen tollen Code hier erhalten, allerdings ist er bei einer grösseren Anzahl sehr langsam und es dauert cirka 1 Stunde bis das Prozedur beendet ist. Nun weiss ich (dank dem Forum) das mit einem Array alles schnell und einfach zu erledigen wäre.
Wäre uuuu heimlich dankbar um ein paar Inputs :)

Option Explicit
Sub TestIt()
Dim wksDst As Worksheet
Dim strSize() As String
Dim i As Long, j  As Long, k As Long, p As Long
Set wksDst = ThisWorkbook.Sheets("Sheet3")
wksDst.Cells.Clear
With ThisWorkbook.Sheets("Sheet1")
For i = 8 To .Cells(8, 9).End(xlDown).Row
ReDim Preserve strSize(j)
strSize(j) = .Cells(i, 9)
j = j + 1
Next
k = 2
For i = 8 To .Cells(8, 2).End(xlDown).Row
If .Cells(i, 2) > 0 Then
wksDst.Cells(k, 1).Resize(, 2) = .Cells(i, 1).Resize(, 2).Value
For p = 0 To UBound(strSize)
For j = 1 To .Cells(i, 2)
wksDst.Cells(k, 3) = strSize(p)
k = k + 1
Next
Next
End If
Next
End With
Set wksDst = Nothing
End Sub
https://www.herber.de/bbs/user/115773.xlsx

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code Optimierung mit Array?
31.08.2017 17:34:44
Guggus
Entschuldigt die Rechtschreibefehler!
hier mein Array-Beispiel
31.08.2017 19:39:20
lupo1
http://xxcl.de/0052.htm
Du schiebst also einfach alles ins Array, machst da drin was, und schreibst es erst dann zurück.
Brauchst Du mehr Variablen zum Zwischenspeichern, kannst Du das Array kopieren und die Kopie dafür nutzen.
AW: hier mein Array-Beispiel
31.08.2017 20:08:56
Guggus
Hi Lupo,
Vielen Dank für den Link, allerdings habe ich es nun probiert aber nicht hingekriegt und es schellen ständig Laufzeitfehler rein :(
Sehe den Wald lauter Bäume nicht mehr....
Arrays sind zwar schneller, aber ...
31.08.2017 21:20:43
lupo1
... die Zuweisungen mit den Doppelindizes musst Du selbst organisieren. Da beisst keine Maus keinen Faden nie ab.
Merke: Schreibe nie in einem Forum "Das klappt nicht". Dann wenden sich alle angewidert ab.
Anzeige
Ein Verständnis-Problem hab ich auch...
01.09.2017 09:03:53
Michael
lieber Guggus,
...denn: Was war denn die grds. Aufgaben für Deinen Code? Was soll überhaupt erledigt werden?
Wenn Du mir das verrätst, kann ich versuchen, Dir das in eine ggf. schnelle Variante zu übersetzen (sofern überhaupt möglich).
LG
Michael
AW: Ein Verständnis-Problem hab ich auch...
01.09.2017 15:02:34
Guggus
Hi Michael (migre) & lupo1
Ich möchte keinesfalls ein Bittsteller sein, arbeite ganz Fleissig an meinen VBA Kenntnissen :),
allerdings kann ich das Verständnis für etwas komplexere Themen Wissenstechnisch noch nicht umsetzen. :)
Folgende Ausgangslage:
Meine Produkte -Bilder- können verschiedene Varianten(Farben, aber hier nicht weiter von Bedeutung) haben. Die Anzahl Varianten ist immer fest definiert und im Beispielbild/File
auch als "Varianten" mit einer Zahl für jedes Bild unterlegt.
Jedes Bild mit jeder Variante hat die gleiche Grössen (siehe Grössen im File/Bild)
Das bedeutet wenn ein Bild 2 Varianten hat, dann hat jede der Beiden Variante jeweils die angegebene Grösse. Zur Ilustration habe ich ein Bild angehängt (Vorher/Nachher). Die Ergbnisse bzw. der Output soll in der Tabelle2 (entgegen dem Beispielbild nicht auf der gleichen Tabelle1) ausgwertet werden.
Die Grössen können stetig erweitert, sodass die File und Produkte angepasst werden können.
Der Angehängte Code macht eigentlich bereits diese ganze Prozedur genau wie gewünscht, nur, je mehr "Grössen", "Varianten" oder Bilder aufgelistet werden, umso länger dauert es. Derzeit bei 900 Bilder dauert es mind. 1 Stunde.
@Michael, ich glaube du hast mir die tolle Idee mit dem Array bei einem anderen Problem mitgegeben, deswegen versuche ich das in diese Richtung :)
Userbild
Bereits vorhandener Code:
Option Explicit
Sub TestIt()
Dim wksDst As Worksheet
Dim strSize() As String
Dim i As Long, j  As Long, k As Long, p As Long
Set wksDst = ThisWorkbook.Sheets("Sheet2")
wksDst.Cells.Clear
With ThisWorkbook.Sheets("Sheet1")
For i = 8 To .Cells(8, 9).End(xlDown).Row
ReDim Preserve strSize(j)
strSize(j) = .Cells(i, 9)
j = j + 1
Next
k = 2
For i = 8 To .Cells(8, 2).End(xlDown).Row
If .Cells(i, 2) > 0 Then
wksDst.Cells(k, 1).Resize(, 2) = .Cells(i, 1).Resize(, 2).Value
For p = 0 To UBound(strSize)
For j = 1 To .Cells(i, 2)
wksDst.Cells(k, 3) = strSize(p)
k = k + 1
Next
Next
End If
Next
End With
Set wksDst = Nothing
End Sub

Anzeige
AW: Ein Verständnis-Problem hab ich auch...
01.09.2017 23:10:32
Guggus
So ihr lieben, habs nun selbst hingekriegt :=)
Es hat ca. 6 Stunden gedauert, aber umso schöner wenn man es selber hinkriegt :)
Danke noch für die Ratschläge, waren sehr hilfreich

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige