Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Inhalte löschen außer Daten im Filter


Betrifft: Inhalte löschen außer Daten im Filter von: Norbert
Geschrieben am: 29.01.2018 11:02:43

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

  

Betrifft: Doppelt. o.w.T. von: Werner
Geschrieben am: 29.01.2018 11:06:50




  

Betrifft: AW: Inhalte löschen außer Daten im Filter von: fcs
Geschrieben am: 29.01.2018 11:37:33

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



  

Betrifft: AW: Inhalte löschen außer Daten im Filter von: Norbert
Geschrieben am: 29.01.2018 11:45:24

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


  

Betrifft: AW: Inhalte löschen außer Daten im Filter von: fcs
Geschrieben am: 29.01.2018 14:17:31

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



Beiträge aus dem Excel-Forum zum Thema "Inhalte löschen außer Daten im Filter"