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

Forumthread: Flexibler Autofilter ohne leere Zellen

Flexibler Autofilter ohne leere Zellen
26.03.2014 12:11:58
Stevo
Hallo zusammen,
ich bin VBA-Neuling und scheitere gerade daran, einen flexiblen Filter in VBA zu basteln. Insgesamt funktioniert alles ganz ordentlich. Einziges Problem ist, dass die leeren Zellen permanent mitgefiltert werden, obwohl ich versucht habe, diese mit "" auszuschließen.
Der flexible Filter liegt im Tabellenblatt "Filter-Auswahl". Dort habe ich im Bereich A5:A10 verschiedene Filter-Vorgaben gemacht, u.a. auch "" um leere Zellen auszuschließen.
Das Tabellenblatt "Unternehmen" ist der Zielbereich, in den ich das Filterergebnis kopieren möchte.
Das Tabellenblatt "Gesamt" ist der Datenbereich, der gefiltert werden soll.
Hier die relevanten Code-Sequenzen:

Sub AutoFilter_Unternehmen()
Dim rngFilterRange As Range
Dim lngCriteriaCount As Long
Dim arrCriteria() As String
Sheets("Unternehmen").Cells.Clear
Sheets("Gesamt").Select
lngCriteriaCount = 10
ReDim arrCriteria(0 To lngCriteriaCount - 1)
arrCriteria(0) = Sheets("Filter-Auswahl").Range("a5")
arrCriteria(1) = Sheets("Filter-Auswahl").Range("a6")
arrCriteria(2) = Sheets("Filter-Auswahl").Range("a7")
arrCriteria(3) = Sheets("Filter-Auswahl").Range("a8")
arrCriteria(4) = Sheets("Filter-Auswahl").Range("a9")
arrCriteria(5) = Sheets("Filter-Auswahl").Range("a10")
Set rngFilterRange = Sheets("Gesamt").Range("a10:i10000")
rngFilterRange.AutoFilter Field:=9, _
Criteria1:=arrCriteria(), _
Operator:=xlFilterValues
Set rngFilterRange = Nothing
Range("a10").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Unternehmen").Range("a5").PasteSpecial xlPasteValuesAndNumberFormats
With Sheets("Gesamt")
If .AutoFilterMode Then
If .FilterMode Then
.ShowAllData
End If
End If
End With
Sheets("Gesamt").Select
End Sub

Was müsste ich tun, damit die leeren Zellen aus dem Filter ausgeschlossen werden?
DANKE EUCH,
Stevo

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Flexibler Autofilter ohne leere Zellen
27.03.2014 02:10:31
fcs
Hallo Stevo,
passe das Einlesen der Filterwerte so an, dass die die Größe des Arrays dynamisch an die Anzahl der nicht leeren Zellen im Bereich A5:A10 auf Blatt Filterauswahl angepasst wird.
Sieht dann etwa wie folgt aus.
Gruß
Franz
Sub AutoFilter_Unternehmen()
Dim rngFilterRange As Range
Dim lngCriteriaCount As Long
Dim arrCriteria() As String
Sheets("Unternehmen").Cells.Clear
Sheets("Gesamt").Select
lngCriteriaCount = 0
For Each rngFilterRange In Sheets("Filter-Auswahl").Range("a5:a10").Cells
If rngFilterRange.Value  "" Then
lngCriteriaCount = lngCriteriaCount + 1
ReDim Preserve arrCriteria(1 To lngCriteriaCount)
arrCriteria(lngCriteriaCount) = rngFilterRange.Text
End If
Next
Set rngFilterRange = Sheets("Gesamt").Range("a10:i10000")
rngFilterRange.AutoFilter Field:=9, _
Criteria1:=arrCriteria(), _
Operator:=xlFilterValues
Set rngFilterRange = Nothing
Range("a10").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Unternehmen").Range("a5").PasteSpecial xlPasteValuesAndNumberFormats
With Sheets("Gesamt")
If .AutoFilterMode Then
If .FilterMode Then
.ShowAllData
End If
End If
End With
Sheets("Gesamt").Select
End Sub

Anzeige
AW: Flexibler Autofilter ohne leere Zellen
27.03.2014 08:18:11
Stevo
Überragend! Danke Dir, Franz.
Viele Grüße
Stevo
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Flexibler Autofilter ohne leere Zellen


Schritt-für-Schritt-Anleitung

Um einen flexiblen Autofilter in Excel zu erstellen, der leere Zellen ignoriert, kannst Du den folgenden VBA-Code verwenden. Dieser Code passt sich dynamisch an die Anzahl der nicht leeren Zellen an und filtert entsprechend.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject" > Einfügen > Modul.
  3. Kopiere und füge den folgenden Code in das Modul ein:
Sub AutoFilter_Unternehmen()
    Dim rngFilterRange As Range
    Dim lngCriteriaCount As Long
    Dim arrCriteria() As String
    Sheets("Unternehmen").Cells.Clear
    Sheets("Gesamt").Select
    lngCriteriaCount = 0

    For Each rngFilterRange In Sheets("Filter-Auswahl").Range("A5:A10").Cells
        If rngFilterRange.Value <> "" Then
            lngCriteriaCount = lngCriteriaCount + 1
            ReDim Preserve arrCriteria(1 To lngCriteriaCount)
            arrCriteria(lngCriteriaCount) = rngFilterRange.Text
        End If
    Next

    Set rngFilterRange = Sheets("Gesamt").Range("A10:I10000")
    rngFilterRange.AutoFilter Field:=9, _
    Criteria1:=arrCriteria(), _
    Operator:=xlFilterValues

    Set rngFilterRange = Nothing
    Range("A10").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Unternehmen").Range("A5").PasteSpecial xlPasteValuesAndNumberFormats

    With Sheets("Gesamt")
        If .AutoFilterMode Then
            If .FilterMode Then
                .ShowAllData
            End If
        End If
    End With

    Sheets("Gesamt").Select
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Führe das Makro aus, um die Daten zu filtern.

Häufige Fehler und Lösungen

  • Leere Zellen werden weiterhin gefiltert: Stelle sicher, dass der Code korrekt angepasst ist, um leere Zellen zu ignorieren. Überprüfe die Bedingungen in der Schleife, die die Werte aus dem Filterbereich einliest.

  • Der Autofilter funktioniert nicht: Überprüfe, ob die Daten im richtigen Format vorliegen und dass der Filterbereich korrekt definiert ist.


Alternative Methoden

Wenn Du keine VBA-Lösung verwenden möchtest, kannst Du auch die Excel-Filterfunktion nutzen:

  1. Wähle die Daten aus, die Du filtern möchtest.
  2. Gehe zu „Daten“ > „Filter“.
  3. Klicke auf den Dropdown-Pfeil der Spalte, die Du filtern möchtest.
  4. Deaktiviere das Häkchen bei „(Leer)“, um leere Zellen zu ignorieren.

Diese Methode ist einfach und erfordert keine Programmierung, jedoch weniger Flexibilität im Vergleich zu VBA.


Praktische Beispiele

Angenommen, Du hast eine Liste von Unternehmen in der Tabelle „Gesamt“ und möchtest nur die Unternehmen anzeigen, die in einer bestimmten Kategorie sind. Mit dem oben genannten VBA-Skript kannst Du leere Zellen in der Filterauswahl ignorieren und nur die relevanten Daten anzeigen.


Tipps für Profis

  • Verwende immer ReDim Preserve, um das Array dynamisch zu erweitern, ohne die bestehenden Daten zu verlieren.
  • Teste den Code schrittweise, um sicherzustellen, dass jeder Teil wie gewünscht funktioniert.
  • Dokumentiere Deine VBA-Codes mit Kommentaren, damit Du und andere später nachvollziehen können, was jeder Teil des Codes bewirken soll.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass leere Zellen nicht in meinen Filterergebnissen erscheinen?
Durch die Implementierung eines VBA-Codes, der nur nicht leere Zellen in das Filterkriterium aufnimmt.

2. Was ist der Unterschied zwischen dem Excel-Filter und VBA?
Der Excel-Filter ist für einfache Filtervorgänge gedacht, während VBA mehr Flexibilität und Anpassungsmöglichkeiten bietet, insbesondere bei großen Datenmengen oder komplexen Kriterien.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige