Hallo Markus,
vielleicht ist dieser Code hilfreich?
Sub CompressData()
Dim wsh As Worksheet
Dim rngDelete As Range
Dim lngRow As Long
Dim datDate As Date
Dim lngTimer As Long
Set wsh = Tabelle1
Application.ScreenUpdating = False
lngRow = 2
Do Until lngRow > wsh.UsedRange.SpecialCells(xlCellTypeLastCell).Row
If IsDate(wsh.Cells(lngRow, 1).Value) Then
If datDate = 0 Then
datDate = wsh.Cells(lngRow, 1).Value
Else
If DateDiff("s", datDate, wsh.Cells(lngRow, 1)) < 60 Then
If rngDelete Is Nothing Then
Set rngDelete = wsh.Cells(lngRow, 1).EntireRow
Else
Set rngDelete = Union(rngDelete, wsh.Cells(lngRow, 1).EntireRow)
End If
Else
datDate = wsh.Cells(lngRow, 1).Value
End If
End If
End If
Application.StatusBar = "Analisiere Zeile " & lngRow & " ..."
If (Timer - lngTimer) > 10 Then
lngTimer = Timer
VBA.DoEvents
End If
lngRow = lngRow + 1
Loop
If Not rngDelete Is Nothing Then
rngDelete.Delete shift:=xlUp
End If
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub
Der Befehl braucht eine gewisse Zeit für die Durchführung. Alle 10 Sekunden werden etwaige aufgelaufene Events abgearbeitet. Wenn dies nicht durchgeführt wird, kommt es vor, dass Windows meckert, dass Excel scheinar nicht mehr reagieren würde.
Am Ende des Befehls werden die ganzen Zeilen in nur einem Befehl gelöscht. Zur Information wird in der Status-Zeile eine Information angezeigt, welche Zeile gerade analisiert wird.
LG, Ben
|