Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
652to656
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
652to656
652to656
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Laufzeitoptimierung einer "For"-Schleife

Laufzeitoptimierung einer "For"-Schleife
18.08.2005 15:54:36
Tobias
Hallo zusammen,
ich habe zwei große Tabellen mit mehreren tausend Einträgen. Tabelle1 enthält Artikelnummern, Tabelle2 enthält Artikelnummern und dazugehörige Preise.
Mit einem Makro will ich die Preise für die Artikelnummern in Tabelle1 übernehmen.
Wenn ich mit Hilfe von zwei verschachtelten For-next-schleifen alle Einträge von Tabelle1 mit allen Einträgen von Tabelle2 vergleiche dauert das viel zu lange.
Habt Ihr eine Idee für eine schnellere Variante?
Danke im voraus,
Tobias

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitoptimierung einer "For"-Schleife
18.08.2005 15:56:08
Unbekannter
Zeig mal dein Makro.
Gruß UN1
AW: Laufzeitoptimierung einer "For"-Schleife
18.08.2005 16:04:11
Tobias
Hier ist der Code.
For A = 1 To 9999
For B = 1 To 9999
Worksheets(1).Cells(A, 1).Value = Worksheets(2).Cells(B, 1).Value Then

Worksheets(2).Cells(B, 2).Select
Selection.Copy
Workheets(1).Cells(A, 2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Exit For
End If
Next B
Next A
AW: Laufzeitoptimierung einer "For"-Schleife
18.08.2005 16:15:38
Unbekannter
Probier mal das.
For A = 1 To Cells(Rows.Count, 1).End(xlUp).Row
For B = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Worksheets(1).Cells(A, 1).Value = Worksheets(2).Cells(B, 1).Value Then
Worksheets(2).Cells(B, 2).Copy
Workheets(1).Cells(A, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Exit For
End If
Next B
Next A
Gruß UN1
Anzeige
AW: Laufzeitoptimierung einer "For"-Schleife
18.08.2005 16:33:07
Tobias
Danke UN1!
In jeder Tabelle stehen etwa 8500 bis 9000 Zeilen. Somit reduziert sich die Laufzeit nur ein wenig.
Gibt es vielleicht einen anderen Schleifentyp, von dem bekannt ist, daß er schneller läuft?
Ansonsten muß ich wohl die lange Laufzeit in Kauf nehmen.
Gruß,
Tobias
AW: Laufzeitoptimierung einer "For"-Schleife
18.08.2005 16:34:58
Unbekannter
Das Problem ist die doppel Schleife die dauer sehr lange.Erkläre mir noch mal genau was das Makro machen soll vielleicht finden wir ne bessere Lösung.
AW: Laufzeitoptimierung einer "For"-Schleife
18.08.2005 16:42:38
Tobias
Die Problemstellung ist folgendermaßen:
Es gibt zwei große Tabellen: Tabelle1 enthält Artikelnummern, Tabelle2 enthält Artikelnummern und dazugehörige Preise.
Für alle Artikelnummer aus Tabelle1 sollen die Preise aus Tabelle2 geholt werden.
Gruß,
Tobias
Anzeige
AW: Laufzeitoptimierung einer "For"-Schleife
18.08.2005 16:35:07
Nepumuk
Hi Tobias,
so sollte es in akzeptabler Zeit fertig sein:
Public Sub test()
    Dim lngRow1 As Long, lngRow2 As Long
    Dim varArray1 As Variant, varArray2 As Variant
    With Worksheets(1)
        varArray1 = .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 2))
    End With
    With Worksheets(2)
        varArray2 = .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 2))
    End With
    For lngRow1 = 1 To UBound(varArray1)
        For lngRow2 = 1 To UBound(varArray2)
            If varArray1(lngRow1, 1) = varArray2(lngRow2, 1) Then
                varArray1(lngRow1, 2) = varArray2(lngRow2, 2)
                Exit For
            End If
        Next
    Next
    With Worksheets(1)
        .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 2)) = varArray1
    End With
End Sub

Gruß
Nepumuk
Excel & VBA – Beispiele
Anzeige
AW: Laufzeitoptimierung einer "For"-Schleife
18.08.2005 16:47:39
Tobias
danke Nepumuk!
Könntest Du mir ganz kurz erklären wie das Makro funktioniert? Enthalten die Arrays den Inhalt von den 2 Tabellenblättern? Warum ist das Makro schneller?
Ich bin gerade dabei, den Code anzupassen.
Gruß,
Tobias
AW: Laufzeitoptimierung einer "For"-Schleife
18.08.2005 16:51:15
Nepumuk
Hi Tobias,
das Makro macht nichts anderes wie deines, nur in Arrays. Operationen darin sind gut 100 mal schneller wie die in Tabellen.
Gruß
Nepumuk
Excel & VBA – Beispiele
AW: Laufzeitoptimierung einer "For"-Schleife
18.08.2005 17:27:09
Tobias
Vielen Dank! Läuft tatsächlich viel schneller!
Gruß,
Tobias

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige