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

Prüfen ob Filteregebnis leer ist

Forumthread: Prüfen ob Filteregebnis leer ist

Prüfen ob Filteregebnis leer ist
26.05.2016 10:23:45
Markus
Hallo liebe Community,
ich lasse über eine Datei mehrere Filter laufen und kopiere dann einige Spalten der gefilterten Datensätze in eine separate Datei. Nun möchte ich die Geschwindigkeit des Makros mit einer If Funktionen erhöhen die prüft, ob nach Anwendung des Filters überhaupt noch Datensätze zum kopieren übrig bleiben.
Hier ein Auschnitt des bisherigen Makros
Set rng = Sheets("Tabelle1").Range("1:1").Find("Versendedatum")
Range(rng.Address).Select
ActiveCell.Offset(1, 0).Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Ergebnis").Select
usw...
Meine Ansatz war die Funktion so zu erweitern:
Set rng = Sheets("Tabelle1").Range("1:1").Find("Versendedatum")
Range(rng.Address).Select
ActiveCell.Offset(1, 0).Select
If ActiveCell.Select "" Then
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Ergebnis").Select
usw....
Else
End If
Leider prüft Excel dann nicht ob der erste Datensatz nach dem Filter leer ist, sondern springt in die Zeile 2 von der Gesamttabelle die garantiert nicht leer ist.
Also läuft meine Prüfung ins leere.
Habt ihr eine Idee?
Beste Grüße
Markus

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob Filteregebnis leer ist
26.05.2016 10:47:04
Nepumuk
Hallo,
ein Beispiel:
Public Sub AutofilterLeer()
    With ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
        If .Areas.Count = 1 Then
            If .Areas(1).Rows.Count = 1 Then
                MsgBox "Autofilter ist leer"
            End If
        End If
    End With
End Sub

Gruß
Nepumuk

Anzeige
AW: Prüfen ob Filteregebnis leer ist
26.05.2016 10:48:16
Luschi
Hallo Marus,
so mache ich das:

If Sheets("Tabelle1").AutoFilter.Range.SpecialCells(xlCellTypeVisible).Rows.Count = 1 Then
MsgBox "Achtung: Anzahl der gefilterten Datensäte = 0", vbSystemModal + 16
Exit Sub
End If
Denn wenn alle Zeilen weggefiltert wurden, bleibt nur noch die Überschriftenzeile des Filters übrig (= 1)
Gruß von Luschi
aus klein-Paris

Anzeige
so leider nicht.
26.05.2016 12:13:35
Daniel
Hi Luschi
diese Lösung ist nicht korrekt und wird immer einen leeren Filter melden, sobald die zweite Zeile ausgeblendet ist, auch wenn danach weiter Zeilen wieder sichtbar sind.
das liegt daran, dass .Rows.Count nur die Zeilen der ersten Area, dh des ersten lückenlos zusammenhängenden Zellblocks der Range zählt. Bei einer Filterung kann aber der sichbare Bereich aus mehren Areas bestehen, sie hierzu auch die Lösung von Nepumuk.
oder du zählst die Zellen in der ersten Spalte, den Cells.Count zählt alle Zellen des Bereich, unabhängig von den Areas:
Sheets("Tabelle1").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count = 1
Gruß Daniel

Anzeige
AW: so leider nicht.
26.05.2016 13:08:41
Luschi
Hallo Daniel,
hast Recht, habe sofort meine Datensammlung korrigiert.
Danke sagt Luschi
aus klein-Paris

AW: Prüfen ob Filteregebnis leer ist
26.05.2016 12:06:26
Daniel
Hi
Noch ne Variante:
If Sheets("Tabelle1").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count =  _
1 Then
MsgBox "Achtung: Anzahl der gefilterten Datensäte = 0", vbSystemModal + 16
Exit Sub
End If
Gruß Daniel

Anzeige
AW: Prüfen ob Filteregebnis leer ist
26.05.2016 12:06:27
Daniel
Hi
Noch ne Variante:
If Sheets("Tabelle1").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count =  _
1 Then
MsgBox "Achtung: Anzahl der gefilterten Datensäte = 0", vbSystemModal + 16
Exit Sub
End If
Gruß Daniel

Anzeige
AW: Prüfen ob Filteregebnis leer ist
26.05.2016 15:11:59
Markus
vielen Dank allen, hat prima funktioniert!!!
Beste Grüße
Markus
Anzeige
Anzeige

Infobox / Tutorial

Prüfen, ob das Filterergebnis leer ist


Schritt-für-Schritt-Anleitung

Um zu prüfen, ob das Filterergebnis in einer Excel-Tabelle leer ist, kannst Du folgenden VBA-Code verwenden. Dieser Code überprüft, ob nach dem Anwenden eines Filters noch Datensätze vorhanden sind:

Public Sub AutofilterLeer()
    With ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
        If .Areas.Count = 1 Then
            If .Areas(1).Rows.Count = 1 Then
                MsgBox "Autofilter ist leer"
                Exit Sub
            End If
        End If
    End With
End Sub

In diesem Beispiel wird geprüft, ob nur die Überschriftenzeile sichtbar ist, was darauf hindeutet, dass der excel filter leer ist.


Häufige Fehler und Lösungen

  1. Fehlerhafte Zeilenanzahl: Wenn Du nur die Zeilen der ersten Area zählst, könnte es sein, dass der Filter fälschlicherweise als leer angezeigt wird. Verwende stattdessen:

    If Sheets("Tabelle1").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count = 1 Then
        MsgBox "Achtung: Anzahl der gefilterten Datensätze = 0", vbSystemModal + 16
        Exit Sub
    End If
  2. Unzureichende Filterüberprüfung: Achte darauf, dass der Filter korrekt angewendet ist, bevor Du prüfst, ob die tabelle leer ist.


Alternative Methoden

Eine weitere Methode, um sicherzustellen, dass Deine vba autofilter range-Überprüfung korrekt ist, wäre die Verwendung der Cells.Count-Methode, um alle sichtbaren Zellen in der ersten Spalte zu zählen:

If Sheets("Tabelle1").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count = 1 Then
    MsgBox "Achtung: Anzahl der gefilterten Datensätze = 0", vbSystemModal + 16
    Exit Sub
End If

Diese Methode stellt sicher, dass auch bei mehreren Areas der Filter korrekt ausgewertet wird.


Praktische Beispiele

Hier ist ein Beispiel, wie Du die Filterüberprüfung in Deinem Makro integrieren kannst:

Sub BeispielMakro()
    ' Filter anwenden
    Sheets("Tabelle1").Range("A1:D100").AutoFilter Field:=1, Criteria1:=">=01.01.2023"

    ' Prüfen, ob das Filterergebnis leer ist
    If Sheets("Tabelle1").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count = 1 Then
        MsgBox "Achtung: Anzahl der gefilterten Datensätze = 0", vbSystemModal + 16
        Exit Sub
    End If

    ' Weiterer Code, um die gefilterten Daten zu kopieren
End Sub

In diesem Beispiel wird der Filter auf das Versendedatum angewendet, und anschließend wird geprüft, ob das Ergebnis leer ist.


Tipps für Profis

  • Verwendung von rng.address: Du kannst rng.address nutzen, um die Adresse der gefilterten Zellen zu ermitteln.

  • Performance-Optimierung: Stelle sicher, dass Du Application.ScreenUpdating = False und Application.Calculation = xlCalculationManual verwendest, um die Performance Deines Makros zu verbessern, insbesondere bei großen Datenmengen.


FAQ: Häufige Fragen

1. Wie kann ich prüfen, ob mein Filter korrekt angewendet wurde?
Verwende den Code, um die Anzahl der sichtbaren Zeilen zu überprüfen. Wenn nur die Überschrift sichtbar ist, ist der Filter korrekt angewendet.

2. Was soll ich tun, wenn ich mehrere Filter gleichzeitig anwenden möchte?
Stelle sicher, dass Du die Filterbedingungen auf die richtige Spalte anwendest und die Überprüfung für jede Spalte durchführst, um sicherzustellen, dass das excel filter leer ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige