Hallo Onur,
wenn dann bitte ohne select und ohne activate. Ich habe dir mal dein Makro etwas angepasst und die ganzen select und activate rausgenommen. Dann noch am Anfang ein Screenupdating=False rein. In deinem Originalmakro und in meinem angepassten Makro habe ich einen Timer eingebaut, der nach Makrodurchlauf die Zeit ausgibt, wie lange das Makro gelaufen ist.
Lass mal beide Versionen mit jeweils 10 Datensätzen in Tabelle1 und Tabelle2 laufen.
Public Sub Bremsen_raus()
Dim v(500) As Variant: ' für bis zu 500 Zeilen - ggf erhöhen
Dim Start As Double
Application.ScreenUpdating = False
Start = Timer
Z = 2
With Sheets("Tabelle2")
'start ab zeile 2 - ggf ändern
While .Cells(Z, 3) <> ""
v(Z) = .Cells(Z, 3): 'Werte in v() speichern
Z = Z + 1
Wend
End With
Z = Z - 1: z2 = 2
'Sheets("Tabelle1").Select
With Sheets("Tabelle1")
While .Cells(z2, 3) <> ""
For nr = 2 To Z
If .Cells(z2, 3) = v(nr) Then
.Rows(z2).Delete
End If
Next nr
z2 = z2 + 1
Wend
z2 = 2: Z = Z + 1
While .Cells(z2, 3) <> ""
.Rows(z2).Copy Sheets("Tabelle2").Cells(Z, 1)
z2 = z2 + 1: Z = Z + 1
Wend
End With
Application.ScreenUpdating = True
MsgBox Format(Timer - Start, "#0.00") & " Sekunden gerödelt!"
End Sub
Sub Makro1()
Dim v(500) As Variant: ' für bis zu 500 Zeilen - ggf erhöhen
Dim Start As Double
Start = Timer
Sheets("Tabelle2").Select
Z = 2
'start ab zeile 2 - ggf ändern
While Sheets("Tabelle2").Cells(Z, 3) <> ""
v(Z) = Sheets("Tabelle2").Cells(Z, 3): 'Werte in v() speichern
Z = Z + 1
Wend
Z = Z - 1: z2 = 2
Sheets("Tabelle1").Select
While Sheets("Tabelle1").Cells(z2, 3) <> ""
For nr = 2 To Z
Rem Stop
If Sheets("Tabelle1").Cells(z2, 3) = v(nr) Then
Rows(z2).Select
Selection.Delete Shift:=xlUp
End If
Next nr
z2 = z2 + 1
Wend
z2 = 2: Z = Z + 1
While Sheets("Tabelle1").Cells(z2, 3) <> ""
Sheets("Tabelle1").Select
Rows(z2).Select
Selection.Copy
Sheets("Tabelle2").Select
Sheets("Tabelle2").Cells(Z, 1).Select
ActiveSheet.Paste
z2 = z2 + 1: Z = Z + 1
Wend
MsgBox Format(Timer - Start, "#0.00") & " Sekunden gerödelt!"
End Sub
Gruß Werner
|