Ausgeblendeten Zeilen löschen

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    Ausgeblendeten Zeilen löschen

    Hallo zusammen,

    ich habe ein Makro, das ausgeblendeten Zeilen löscht. Es funktioniert so: ich setze Autofilter z.B. auf 1 und somit werden entsprechende Zeilen ausgeblendet. Danach führe ich mein Makro aus, das diese ausgeblendeten Zeilen löscht. Nach dem Löschvorgang einige uasgeblendete Zeilen bleiben noch. Wenn ich das Makro noch mal ausführe, wird Rest dann auch gelöscht. Wo sitzt der Haken bei diesen Zeilen uder Zellen in diesen Zeilen? Wieso werden sie alle nicht auf ein mal gelöscht? Kennt jemand so was?

    Danke im Voraus
    Hallo Peterfido,

    anbei ist die Excel- Tabelle, das Makro ist da drin.

    Sub test_makro()

    Dim wksBlatt As Worksheet
    Dim rng As Range

    Application.ScreenUpdating = False

    For Each rng In ActiveSheet.UsedRange
    If rng.EntireRow.Hidden = True Then
    rng.EntireRow.Hidden = False
    rng.EntireRow.Delete
    End If
    Next

    Application.ScreenUpdating = True

    End Sub

    Das Makro muss so oft ausgeführt werden, bis alle ausgefilterten Zeilen gelöscht werden.

    Danke.
    Dateien
    • Mappe1_test.xls

      (24,06 kB, 393 mal heruntergeladen, zuletzt: )
    Excel löschte eine Zeile und springt dann in die Nächste, sodass eine nachgeschobene Zeile nicht mehr berücksichtig wird.
    Du könntest die Funktion rekursiv aufrufen oder die Schleife muss von Hinten nach Vorn durchlaufen werden.

    Beispiel rekursiv:

    Visual Basic-Quellcode

    1. Sub test_makro()
    2. Dim wksBlatt As Worksheet
    3. Dim rng As Range
    4. Application.ScreenUpdating = False
    5. For Each rng In ActiveSheet.UsedRange
    6. If rng.EntireRow.Hidden = True Then
    7. rng.EntireRow.Hidden = False
    8. rng.EntireRow.Delete
    9. Call test_makro
    10. Exit For
    11. End If
    12. Next
    13. Application.ScreenUpdating = True
    14. End Sub


    Beispiel Rückwärts:

    Visual Basic-Quellcode

    1. Sub test_makro1()
    2. Dim wksBlatt As Worksheet
    3. Dim rng As Range
    4. Dim lastrow As Long
    5. Dim l As Long
    6. Application.ScreenUpdating = False
    7. lastrow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    8. If lastrow > 1 Then
    9. For l = lastrow To 1 Step -1
    10. If Range("A" & l).EntireRow.Hidden Then
    11. Range("A" & l).EntireRow.Delete
    12. End If
    13. Next l
    14. End If
    15. Application.ScreenUpdating = True
    16. End Sub
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „peterfido“ ()