AW: Danke, aber...
15.02.2017 10:34:56
Daniel
Hi
bei dieser Datenmenge besser so:
Sub Leerzeilen()
Dim Rx As Range
Dim R1 As Range
Dim R2 As Range
Set Rx = Intersect(ActiveSheet.UsedRange, Range("1:" & Cells(Rows.Count, 8).End(xlUp).Row))
Set Rx = Rx.Resize(, Rx.Columns.Count + 2)
Set R1 = Rx.Columns(Rx.Columns.Count - 1)
Set R1 = R1.Offset(1, 0).Resize(R1.Rows.Count - 1)
Set R2 = Rx.Columns(Rx.Columns.Count)
Set R2 = R2.Offset(1, 0).Resize(R2.Rows.Count - 1)
R1.Formula = "=Row()"
R2.FormulaR1C1 = "=IF(ISTEXT(RC8),ROW()-0.5,""xxx"")"
With Range(R1, R2)
.Copy
.PasteSpecial xlPasteValues
End With
Rx.Sort key1:=R2, order1:=xlAscending, Header:=xlYes
With R2.SpecialCells(xlCellTypeConstants, 1)
If (R1.Cells.Count + R2.Cells.Count * 2 + 1) > ActiveSheet.Rows.Count Then
MsgBox "Zu viele Zeilen"
Rx.Sort key1:=R1, order1:=xlAscending, Header:=xlYes
Range(R1, R2).EntireColumn.Delete
Exit Sub
End If
Intersect(Rx, .EntireRow).Font.Color = vbRed
.Copy
R1.Cells(1, 1).End(xlDown).Offset(1, 0).Resize(.Rows.Count * 2).PasteSpecial xlPasteValues
End With
Rx.EntireColumn.Sort key1:=R1, order1:=xlAscending, Header:=xlYes
Range(R1, R2).EntireColumn.Delete
End Sub
dauert bei mir für 600.000 Zeilen 12 Sekunden.
Dieser Code ist darauf ausgelegt, dass die erste Zeile eine Überschriftenzeile ist.
Gruß Daniel