Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Inhalte löschen außer Daten im Filter

Inhalte löschen außer Daten im Filter
29.01.2018 11:02:43
Norbert
Hallo,
es gibt ja verschiedene Anweisungen, um Daten auf einem Arbeitsblatt in Excel per VBA zu löschen, beispielsweise CLEAR, DELETE etc.
Besteht die Möglichkeit, per VBA-Anweisung nur die Inhalte zu löschen, welche nach einer Filtersetzung noch sichtbar sind? Die Daten, welche sich "im Filter" befinden sollen nicht gelöscht werden, sondern nach dem löschen der nach der Filterung übrig gebliebenen Daten wieder eingefügt werden.
Vielen Dank.
Beste Grüße
Norbert
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Doppelt. o.w.T.
29.01.2018 11:06:50
Werner
AW: Inhalte löschen außer Daten im Filter
29.01.2018 11:37:33
fcs
Hallo Norbert,
bei Filtern per Autofiter kann man per VBA wie folgt die sichtbaren Zellen löschen.
Gruß
Franz
Sub Filter_sichtbar_loeschen()
Dim wks As Worksheet
Dim Zei_1 As Long, Zei_L As Long
Dim Spa_1 As Long, Spa_L As Long
Set wks = ActiveSheet
If MsgBox("Sollen die sichtbaren Zeilen des Autofilterbreichs gelöscht werden?", _
vbQuestion + vbOKCancel, "Gefiltere Löschen") = vbCancel Then Exit Sub
With wks
If .AutoFilterMode = True Then
If .FilterMode = True Then
With .AutoFilter.Range
Zei_1 = .Row + 1
Zei_L = .Row + .Rows.Count - 1
Spa_1 = .Column
Spa_L = .Column + .Columns.Count - 1
End With
'sichtbare Werte im Autofilterbereich löschen
With .Range(.Cells(Zei_1, Spa_1), .Cells(Zei_L, Spa_L))
.SpecialCells(xlCellTypeVisible).Delete shift:=xlShiftUp
End With
'alle Daten anzeigen
.ShowAllData
End If
End If
End With
End Sub

Anzeige
AW: Inhalte löschen außer Daten im Filter
29.01.2018 11:45:24
Norbert
Hallo Franz,
vielen Dank für die Mühe.
Merkwürdigerweise löscht Deine Anweisung meine Daten nicht, nachdem ich in der MsgBox OK ausgewählt habe.
Kannst Du Dir das erklären?
Beste Grüße
Norbert
AW: Inhalte löschen außer Daten im Filter
29.01.2018 14:17:31
fcs
Hallo Norbert,
das Makro funktioniert innerhalb eins "normalen" Autofilterbereiches in einem Tabellenblatt.
Wenn die Daten innerhalb des Tabellenblatts in einer Tabelle/Liste stehen, dann muss das Makro anders aussehen.
Ich hab das Makro mal entsprechend erweitert.
Gruß
Franz
Sub Filter_sichtbar_loeschen()
Dim WKS As Worksheet, objList As ListObject
Dim Zei_1 As Long, Zei_L As Long
Dim Spa_1 As Long, Spa_L As Long
Set WKS = ActiveSheet
If MsgBox("Sollen die sichtbaren Zeilen des Autofilterbreichs gelöscht werden?", _
vbQuestion + vbOKCancel, "Gefiltere Löschen") = vbCancel Then Exit Sub
With WKS
If .ListObjects.Count > 0 Then
Set objList = .ListObjects(1)
With objList
If .ShowAutoFilter = True Then
If .AutoFilter.FilterMode = True Then
.DataBodyRange.SpecialCells(xlCellTypeVisible).ClearContents
.AutoFilter.ShowAllData
For Zei_1 = .DataBodyRange.Rows.Count To 1 Step -1
If Application.WorksheetFunction.CountA(.ListRows(Zei_1).Range) = 0 Then
.ListRows(Zei_1).Delete
End If
Next
Else
MsgBox "in der Tabelle ist kein Filter gesetzt!"
End If
Else
MsgBox "in der Tabelle ist der Autofilter nicht aktiv!"
End If
End With
Else
If .AutoFilterMode = True Then
If .FilterMode = True Then
With .AutoFilter.Range
Zei_1 = .Row + 1
Zei_L = .Row + .Rows.Count - 1
Spa_1 = .Column
Spa_L = .Column + .Columns.Count - 1
End With
'sichtbare Werte im Autofilterbereich löschen
With .Range(.Cells(Zei_1, Spa_1), .Cells(Zei_L, Spa_L))
.SpecialCells(xlCellTypeVisible).Delete shift:=xlShiftUp
End With
'alle Daten anzeigen
.ShowAllData
Else
MsgBox "Im aktiven Tabellenblatt ist kein Filter gesetzt", _
vbOKOnly, "Gefiltere Löschen"
End If
Else
MsgBox "Im aktiven Tabellenblatt ist der Autofilter nicht aktiv", _
vbOKOnly, "Gefiltere Löschen"
End If
End If
End With
End Sub

Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Inhalte löschen außer Daten im Filter


Schritt-für-Schritt-Anleitung

Um Inhalte in Excel zu löschen und dabei die Daten im Filter beizubehalten, kannst Du eine VBA-Anweisung verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Kopiere den folgenden VBA-Code und füge ihn in das Modul ein:

    Sub Filter_sichtbar_loeschen()
        Dim wks As Worksheet
        Dim Zei_1 As Long, Zei_L As Long
        Dim Spa_1 As Long, Spa_L As Long
        Set wks = ActiveSheet
    
        If MsgBox("Sollen die sichtbaren Zeilen des Autofilterbreichs gelöscht werden?", _
        vbQuestion + vbOKCancel, "Gefiltere Löschen") = vbCancel Then Exit Sub
    
        With wks
            If .AutoFilterMode = True Then
                If .FilterMode = True Then
                    With .AutoFilter.Range
                        Zei_1 = .Row + 1
                        Zei_L = .Row + .Rows.Count - 1
                        Spa_1 = .Column
                        Spa_L = .Column + .Columns.Count - 1
                    End With
    
                    ' Sichtbare Werte im Autofilterbereich löschen
                    With .Range(.Cells(Zei_1, Spa_1), .Cells(Zei_L, Spa_L))
                        .SpecialCells(xlCellTypeVisible).Delete shift:=xlShiftUp
                    End With
    
                    ' Alle Daten anzeigen
                    .ShowAllData
                End If
            End If
        End With
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Wende einen Autofilter auf Deine Daten an.

  6. Führe das Makro aus, indem Du ALT + F8 drückst, das Makro auswählst und auf Ausführen klickst.


Häufige Fehler und Lösungen

  • Fehler: "Excel Filter lässt sich nicht löschen"

    • Stelle sicher, dass der Autofilter aktiv ist und dass Du im richtigen Bereich arbeitest. Wenn die Daten in einer Excel-Tabelle sind, muss das Makro entsprechend angepasst werden.
  • Fehler: "Excel Filter kann nicht gelöscht werden"

    • Überprüfe, ob Du die richtigen Zellen ausgewählt hast. Wenn Du innerhalb einer Tabelle arbeitest, verwende die angepasste Version des Makros, die die ListObjects berücksichtigt.

Alternative Methoden

Falls Du keine VBA-Lösung verwenden möchtest, kannst Du auch manuell filtern und löschen:

  1. Wende den Filter an, um die gewünschten Daten anzuzeigen.
  2. Markiere die Zellen, die gelöscht werden sollen, und drücke Entf auf Deiner Tastatur.
  3. Entferne den Filter, um alle Daten wieder anzuzeigen.

Du kannst auch die Excel-Tastenkombination Strg + Shift + L verwenden, um den Filter schnell ein- oder auszuschalten.


Praktische Beispiele

Nehmen wir an, Du hast eine Liste von Verkäufen und möchtest alle Verkäufe unter einem bestimmten Betrag löschen, ohne die Filterdaten zu verlieren. Mit dem obigen VBA-Skript kannst Du spezifische Verkaufszahlen löschen, während die gefilterten Daten intakt bleiben.

Hier ist ein einfaches Beispiel, um den Vorgang zu veranschaulichen:

  • Datenbereich: A1:C10
  • Filter: Filtere nach dem Kriterium "Verkäufe > 1000".
  • Makro ausführen: Nur die Zellen außerhalb des Filters werden gelöscht.

Tipps für Profis

  • Schnellzugriffsleiste anpassen: Füge das Makro zur Schnellzugriffsleiste hinzu, um es schneller auszuführen.
  • Makros sichern: Speichere Deine Excel-Datei als makrofähige Datei (.xlsm), um das Makro zu behalten.
  • VBA-Debugging: Nutze die F8-Taste, um den Code Schritt für Schritt auszuführen und Probleme zu identifizieren.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass das Makro funktioniert?
Stelle sicher, dass der Autofilter aktiv ist und dass Du im richtigen Bereich arbeitest. Das Makro funktioniert nur, wenn der Filter korrekt gesetzt ist.

2. Was tun, wenn das Makro meine Daten nicht löscht?
Überprüfe die Filtereinstellungen und stelle sicher, dass Du die korrekten Zellen ausgewählt hast. Wenn Du mit einer Tabelle arbeitest, verwende die angepasste Makroversion.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige