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

geht´s auch schneller????

geht´s auch schneller?
29.12.2006 18:01:15
Melanie
Hallo liebe Leute vom Forum!!!
Ich habe eine "etwas größere Tabelle" mit Materialnummern, die ich ursprünglich per S-Verweis um einige Datenfelder erweitern wollte, aber das dauerte super lange. Jetzt habe ich die ganze Geschichte mit Match-Befehlen gestaltet, aber das dauert auch super lange. Hat jemand eine Idee wie ich das noch schneller machen könnte? Ich weiß, dass das mit dem "activate" nicht optimal ist, aber wie kann ich das umgehen - irgendwie muss ich die Felder ja ansteuern!?
Ich sag schon mal DANKE vorab.
Gruß,
Melanie

Sub Match()
Dim i As Long
Dim var As Variant
Dim material As Variant
Application.EnableEvents = False
Application.ScreenUpdating = False
On Error GoTo ERRORHANDLER
For i = 3 To 30000
If Not IsEmpty(Cells(3, 1)) Then
material = Cells(i, 1).Value
Cells(i, 1).Activate
var = Application.Match(material, Worksheets("Tabelle1").Columns(1), 0)
If Not IsError(var) Then
ActiveCell.Offset(0, 47).Value = Worksheets("Tabelle1").Cells(var, 31).Value
ActiveCell.Offset(0, 48).Value = Worksheets("Tabelle1").Cells(var, 20).Value
ActiveCell.Offset(0, 49).Value = Worksheets("Tabelle1").Cells(var, 40).Value
ActiveCell.Offset(0, 50).Value = Worksheets("Tabelle1").Cells(var, 41).Value
ActiveCell.Offset(0, 51).Value = Worksheets("Tabelle1").Cells(var, 35).Value
ActiveCell.Offset(0, 52).Value = Worksheets("Tabelle1").Cells(var, 43).Value
Else
ActiveCell.Offset(0, 47).Value = "-"
ActiveCell.Offset(0, 48).Value = "-"
ActiveCell.Offset(0, 49).Value = "-"
ActiveCell.Offset(0, 50).Value = "-"
ActiveCell.Offset(0, 51).Value = "-"
ActiveCell.Offset(0, 52).Value = "-"
End If
End If
Next i
ERRORHANDLER:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: geht´s auch schneller?
29.12.2006 18:37:44
Nepumuk
Hallo Melanie
If Not IsEmpty(Cells(3, 1)) Then

ist das richtig so, dass du immer die selbe Zelle abfragst?
Gruß
Nepumuk
AW: geht´s auch schneller?
29.12.2006 19:00:43
Daniel
Hallo
du hast in deinem Code mehrere Bremsen drinnen:
1. Aktivieren von Zellen
unbedingt das Aktiviern von Zellen vermeiden, daß ist lahm.
Statt
Cells(x,y).acitvate
activecell.value = "xxx"

schreibt man einfacher
cells(x,y).value = "xxx"
noch besser wärs in deinem Falle, mit der With-Klammer zu arbeiten. dabei wird für das Objekt, das mit With beschrieben wird, nur noch ein Punkt gesetzt.
With cells(x,y)
.offset(0,2).value = "xxx"
.offset(0,3).value = "yyy"
end with 

2. Bremse ist die Match/VLookUp-Funktion
die ist bei grossen Datenmengen auch nicht die schnellste.
erster Schritt wäre, in
var = Application.Match(material, Worksheets("Tabelle1").Columns(1), 0)
den Zellbereich genau einzuschränken und nicht die gesamte Spalte zu nehmen.
was auch sehr starkt bremst, ist der 3. Parameter "0"
wesentlich schneller ist es, die MATCH-Funktion mit "1" bzw TRUE als 3.Parmeter zu verwenden.
Allerdings muß dann deine Datentabelle in "Tabelle1" aufsteigend sortiert sein und dir muß klar sein, daß bei nicht vorhanden Werten kein Fehler mehr ausgegeben wird, sondern der nächstpassende Wert verwendet wird.
Wenn das kein Problem ist, ist bei grossen Datenmengen der Geschwindigkeitszuwachs dramatisch (aufgrund der vorsortierung kann wesentlich effizienter gesucht werden)
das gilt gleichermaßen für MATCH und VLOOKUP.
3. Bremse ist die Schleife, mit der die Daten gefüllt werden.
besser wäre, die S-Verweisfunktion direkt als Formel in die Tabelle zu schreiben, nach unten zu kopieren und dann die Formeln durch die Werte zu ersetzen.
das kann man, wenns ne einmalige Aktion ist, auch ohne Makro recht zügig von Hand machen.
Gruß, Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige