VBA For Schleife Performanceprobleme
#11
Hallo Bydo,

du willst ca.
-66.000 Zellen einzeln aus der Prüfliste und mehr als 2 Milliarden Zellen einzeln aus dem Inventar lesen und 154.000 Zellen einzeln in die Ausgabe schreiben.

Eine Geschwindigkeitsverbesserung vom Faktor > 10.000 dürfte hierbei kein Problem sein.

1) Wenn du die Eingangsarrays wie Fennek beschrieben hat mit je einem Befehl einliest und das Ausgangsarray mit einem Befehl ausgibst, sollte ein Verbesserungsfaktor > 100 möglich sein.

2) Wenn du zusätzlich nicht bei jeder Prüfliste immer das gesamte Inventar durchliest sollte zusätzlich ebenfalls ein Verbesserungsfaktor > 100 möglich sein.
Da die vier Vergleichsspalten in nur zwei Listen sind, wird die Nutzung von Dictionaries, wie Fennek vorgeschlagen hat, in diesem Fall  wohl schneller als eine Sortierung der Spalten sein.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#12
Hi,

ersetze die Zeile durch diese

Code:
Set rngTreffer = Sheets("Inventar").Columns(3).Resize(, 2).Find(Sheets("Prüfliste").Cells(CHECKROW, 2).Value, LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows)
Gruß Stefan
Win 10 / Office 2016
Top
#13
Habe eine tolle Lösung im ms excel Forum erhalten:

http://www.ms-office-forum.net/forum/showthread.php?&t=342528
Top
#14
Hallo Bydo,

wie schnell ist denn Mc Santa's Programm auf deinem Datenbestand?
Hast du seine Anmerkung zur Nutzung von Dictionaries gelesen?

Wenn du "gelobst" Blush in Zukunft CP's nicht einzustellen oder wenigsten in allen Foren auszuweisen, wird dir bestimmt jemand Dictionaries einbauen.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#15
Wie z.B. hier

http://www.vbaexpress.com/forum/showthre...erformance&p=361026&viewfull=1#post361026


Bitte verzichte auf crossposting !!
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#16
Hallo,

nachdem der Fragesteller schon durch exzessives CP (min. 5 Foren), möchte ich mich mit einem Vergleich der bereits sehr guten Anworten versuchen.

Aufbauend auf dem Code von snb (vbexpress) und Kommentaren von Zwenn (Herber, "Telefonbuch")  sollte dieser Code (vielleicht mit Ausnahme des "Filters") recht schnell sein. Ein weiteres Sheets("Neu") wird benötigt.


Code:
Sub Fen()

f1 = Sheets("inventar").Cells(1).CurrentRegion
f2 = Sheets("prüfliste").Cells(1).CurrentRegion

With CreateObject("system.collections.arraylist")
   For i = 2 To UBound(f1)
       .Add f1(i, 4)
   Next i
       .Sort
   For i = 2 To UBound(f2)
       If .contains(f2(i, 2)) Then .Add (f2(i, 1))
   Next
   fn = .toarray
   fn = Filter(fn, "Z")
   Sheets("Neu").Cells(2, 1).Resize(UBound(fn) + 1) = Application.Transpose(fn)
   Sheets("Neu").Cells(2, 2).Resize(UBound(fn) + 1, 3) = Array(Format(Now, "DD.MM.YYYY"), "bydo@vba.ms", "bydo")
End With
End Sub

Vielleicht gibt der Fragesteller die jeweiligen Laufzweiten an.

mfg

(auch "Arraylist" habe ich bei snb gefunden, einer der ganz wenigen Ansätze, VB bzw .Net aus xl anzusprechen)
(über "System.Security.Cryptography" gab es keine Diskussion)
Top
#17
@Fen

In statu nascendi: system.collections.sortedlist
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste