Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1008to1012
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

Schleife oder if abfrage bermst sehr stark

Schleife oder if abfrage bermst sehr stark
10.09.2008 14:40:00
chris
Hallo VBA Experten,
ich hätte mal eine frage zu einer Schleife.
habe ein VBA Programm geschrieben das ist auch gut im Einsatz.Nur jetzt möchte ich es gerne beschleunigen aber komme nicht weiter.
habe schon alles versucht mit screenupdating usw...
jETZT habe ich die Bremse gefunden.
ich habe 2 ineinander verschachtelte schleifen.
die zweite bremst.
sie geht hier im aktuellen beispiel von 2 bis 3330
Hier die Schleife wie sie aktuell ist.
For x2 = 2 To lz_verwendung
If UCase(Worksheets("Importiere_Files_Verwendung").Cells(x2, wo)) = UCase(aktnr) Then
.....
...
usw....
else
end if
next
Wenn ich diese zweite schleife umbaue zu testzwecken und habe einfach die schleife ohne bedingungen ausgeführt mit einem sprung zu einer sprungmarke..Also So:
For x2 = 2 To lz_verwendung
If UCase(Worksheets("Importiere_Files_Verwendung").Cells(x2, wo)) = UCase(aktnr) Then
goto ueberspring
'hier mein code
'usw....
else
end if
ueberspring:
next
Aber das bringt auch nicht viel.
Bis die schleife mit If bedingung durch ist dauert ewig..
habe die zweite Schleife nun so umgebaut und es läuft innerhalt von Millisekunden durch:
For x2 = 2 To lz_verwendung
goto ueberspring
If UCase(Worksheets("Importiere_Files_Verwendung").Cells(x2, wo)) = UCase(aktnr) Then
'hier mein code
'usw....
else
end if
ueberspring:
next
Warum ist das so ? Es kann doch nicht sein das die if abfrage so stark bremst ?
Weil im ersten beispiel habe ich ja gleich nach der if abfrage den goto eingebaut. ?
Würde mich sehr über Hilfe freuen.
P.s sorry wegen Rechtschreibfehler
Vielen dank gruß Chris

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

Betreff
Datum
Anwender
Anzeige
AW: Schleife oder if abfrage bermst sehr stark
10.09.2008 14:48:44
Tobias
Hallo Chris!
Ich denke, ohne Deine Datei zu kennen, dass nicht die If-Abfrage sondern das schrittweise Auslesen der Zellen bremst.
Stelle den Code - zu Testzwecken - mal etwas um (keine Garantie auf Vollständigkeit, Fehler und ähnliches :-))
dim var as variant
...
'ordne der Variable einen Zellbereich zu
Worksheets("Importiere_Files_Verwendung")
var = Range(.cells(2,wo), .cells(lz_verwendung,wo))
...
'if-Abfrage
If UCase(var(x2-1, 1)) = UCase(aktnr) Then
...
Besser?
Gruß, Tobi
http://vba-blog.de/
Anzeige
Korrektur
10.09.2008 14:49:00
Tobias
Der erste Fehler:
Worksheets("Importiere_Files_Verwendung")
var = Range(.cells(2,wo), .cells(lz_verwendung,wo))
soll natürlich
With Worksheets("Importiere_Files_Verwendung")
var = Range(.cells(2,wo), .cells(lz_verwendung,wo))
end with
heißen..
AW: Korrektur
10.09.2008 15:24:03
chris
Hey super , das bringt bestimmt was.
Nur leider komme ich heute nicht merh zum testen.
Werde morgen feedback geben.
Danke erst einmal !!!
AW: Korrektur
11.09.2008 13:22:00
chris
Hallo ich bins noch einmal.
Habe den Code jetzt so umgestellt:
hier ein kleiner Teil des Codes:
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
With Worksheets("Importiere_Files_Verwendung")
For x1 = 2 To lz_gepaart
aktnr = UCase(Worksheets("Klassen mit Verwendung gepaart").Cells(x1, 1))
For x2 = 2 To lz_verwendung
var = UCase(Range(.Cells(x2, wo), .Cells(x2, wo)))
'If UCase(var) = UCase(aktnr) Then
If "y" = "z" Then
'gleiche Düsennummern gewünschten Werte eintragen
'Prüfen ob verwendung wenn ja dann nächste Nummer zeile darunter beginnt nicht mit 433
i = x2 + 1
y = 0
Bringt leider nicht viel:(
Über einen weiteren Lösungsvorschlag würde ich mich sehr freuen.
Und danke noch einmal !
P.s Du hattest recht. Es liegt so wie ich jetzt probiert habe am auslesen der zelle.nur leider muss es eben jedes mal neu ausgelesen werden.
Anzeige
AW: Korrektur
11.09.2008 14:06:00
Tobias
Hallo Chris!
http://www.avdf.com/apr98/art_ot003.html

How do you read in/write out lots of cells at once?
'to read in
Dim A as Variant 'MUST be variant, no brackets
A = Range("SomeRange").Resize(10,20) 'reads 10x20 array starting at range SomeRange
'(NB I've used Resize above but you can specify a range of cells any way you want)
'to write back to sheet
Range("SomeRange").Resize(10,20) = A
'A can be any data type but MUST be two dimensional even if you are only writing one
'column or row - first dimension is used for rows, and the second for columns
'this can be slow - see third question below for workaround..


Entferne wirklich ALLE Cells oder Range Aufrufe aus der Schleife. Arbeite mit Datenfelder die Du vor der Schleife mit Daten aus dem Sheet füllst und nach der Schleife in Dein Sheet zurückschreibst. Keine Lese- oder Schreibzugriffe auf Cells innerhalb der Schleifen!
Das macht Dir sicherlich jetzt viel Arbeit, ist aber sehr wichtig! Auch für die Zukunft.
Viel Spaß beim Umstellen :-) Bei weiteren Problemen kannst Du mich auch per Email erreichen.
Gruß, Tobi
http://vba-blog.de/

Anzeige
AW: Korrektur
11.09.2008 14:25:00
chris
Ohh mal schauen das ich das hinbekomme.
Du meinst als so verstehe ich es mit arrays zu arbeiten und diese dann zu druchsuchen..
Danke werd ich mal testen.Bekomm ich schon hin :)
Schönen Tag noch gruß Chris
AW: Korrektur
12.09.2008 11:39:37
chris
Hallo Tobi,
ist auf jeden fall schon jetzt um einiges schneller.
Habe es noch nicht ganz fertig aber der Tipp war super.
Danke noch einmal ! gruß Chris

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige