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

Forumthread: Autofilter per VBA - Leere anzeigen

Autofilter per VBA - Leere anzeigen
22.11.2008 12:59:00
Wolfgang
Hallo,
wenn ich den Autofilter innerhalb eines Tabellenblattes eingeschaltet habe, kann ich ja zwischen dem Inhalt der jeweiligen Spalte und auch u.a. Leere bzw. Nichtleere filtern lassen. Gäbe es im untenstehenden Code eine Möglichkeit, diesen um Leere zu ergänzen? - Klicke ich nämlich innerhalb der Combobox einfach eine leere Zelle an, bekomme ich nicht nur Leere angezeigt. Danke schon jetzt für die Rückmeldungen.
Gruß - Wolfgang

Private Sub Gesamt()
' Variablendeklaration
Dim intCounter As Integer
Dim shSource As Worksheet
Dim lngRow As Long
Dim wb As Workbook
Dim sport As String
Dim fd As FileDialog
Dim vrtSelectedItem As Variant
'neue Tabelle für gefiltere Datensätze anlegen
' Objektvariable für aktives Blatt festlegen
Set shSource = Sheets("Gesamt")
' shSource.Unprotect
' Schleife über 16 TextBoxes
For intCounter = 1 To 16
'Wenn eine Auswahl erfolgte, dann
If Controls("cbbKriterium" & intCounter).ListIndex  -1 Then
'Kriterium festlegen
If intCounter = 3 Then
shSource.Range("A1").Autofilter Field:=intCounter, _
Criteria1:=CDate(Controls("cbbKriterium" & intCounter).Value)
Else
shSource.Range("A1").Autofilter Field:=intCounter, _
Criteria1:=Controls("cbbKriterium" & intCounter).Value
End If
End If
Next intCounter
' Alle sichtbaren Zellen kopieren
shSource.Range("A1").CurrentRegion.Copy
' Neues Arbeitsblatt hinzufügen
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Paste
' Autofilter ausschalten
shSource.Range("A1").Autofilter
' Kopiermodus ausschaltern
Application.CutCopyMode = False
' Zwischenspeicher einfügen
' Zelle A1 auswählen
Range("A1").Select
Unload Me
'shSource.Range("A1").Autofilter
'shSource.Protect
Set fd = Nothing
End Sub


Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Autofilter per VBA - Leere anzeigen
24.11.2008 13:45:00
fcs
Hallo Wolfgang,
am einfachsten wäre es, wenn du in die Auswahllisten für die Kriterium-Comboboxen zusätzlich die Eintrage (Alle), (Leere) und (NichtLeere) aufnehmen würdest.
Dann kannst deine Prozedur wie folgt anpassen, um diese "Sonderfilter" einzusetzen.

' Schleife über 16 TextBoxes
For intCounter = 1 To 16
'Wenn eine Auswahl erfolgte, dann
If Controls("cbbKriterium" & intCounter).ListIndex  -1 Then
'Kriterium festlegen
Select Case Controls("cbbKriterium" & intCounter).Value
Case "(Alle)"
shSource.Range("A1").AutoFilter Field:=intCounter '(Alle) anzeigen
Case "(Leere)", ""
shSource.Range("A1").AutoFilter Field:=intCounter, Criteria1:="=" '(Leere) filtern
Case "(NichtLeere)"
shSource.Range("A1").AutoFilter Field:=intCounter, Criteria1:="" '(Nichtleere)  _
filtern
Case Else
If intCounter = 3 Then
shSource.Range("A1").AutoFilter Field:=intCounter, _
Criteria1:=CDate(Controls("cbbKriterium" & intCounter).Value)
Else
shSource.Range("A1").AutoFilter Field:=intCounter, _
Criteria1:=Controls("cbbKriterium" & intCounter).Value
End If
End Select
End If
Next intCounter
' Alle sichtbaren Zellen kopieren


Gruß
Franz

Anzeige
Danke Franz - klappt super
24.11.2008 21:32:00
Wolfgang
Hallo Franz,
erneut recht herzlichen Dank für Deine Rückmeldung und Ausarbeitungen. Ich habe den Code soeben eingepflegt und angepasst. Der läuft super ! - nochmals Danke !
Herzliche Grüße
Wolfgang
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Autofilter in Excel VBA für Leere Zellen einrichten


Schritt-für-Schritt-Anleitung

Um den Autofilter in Excel VBA zu nutzen und dabei leere Zellen zu filtern, kannst du den folgenden Code verwenden. Dieser Code ermöglicht es dir, zwischen leeren und nicht leeren Zellen zu unterscheiden.

Private Sub Gesamt()
    ' Variablendeklaration
    Dim intCounter As Integer
    Dim shSource As Worksheet
    Dim wb As Workbook
    ' Objektvariable für aktives Blatt festlegen
    Set shSource = Sheets("Gesamt")

    ' Schleife über 16 TextBoxes
    For intCounter = 1 To 16
        ' Wenn eine Auswahl erfolgte, dann
        If Controls("cbbKriterium" & intCounter).ListIndex <> -1 Then
            ' Kriterium festlegen
            Select Case Controls("cbbKriterium" & intCounter).Value
                Case "(Alle)"
                    shSource.Range("A1").AutoFilter Field:=intCounter '(Alle) anzeigen
                Case "(Leere)", ""
                    shSource.Range("A1").AutoFilter Field:=intCounter, Criteria1:="=" '(Leere) filtern
                Case "(NichtLeere)"
                    shSource.Range("A1").AutoFilter Field:=intCounter, Criteria1:="<>"
                Case Else
                    shSource.Range("A1").AutoFilter Field:=intCounter, _
                        Criteria1:=Controls("cbbKriterium" & intCounter).Value
            End Select
        End If
    Next intCounter

    ' Alle sichtbaren Zellen kopieren
    shSource.Range("A1").CurrentRegion.Copy
    ' Neues Arbeitsblatt hinzufügen
    Worksheets.Add after:=Worksheets(Worksheets.Count).Paste
    ' Autofilter ausschalten
    shSource.Range("A1").AutoFilter
    Application.CutCopyMode = False
    Unload Me
End Sub

Häufige Fehler und Lösungen

  • Fehler: Der Filter zeigt keine leeren Zellen an.
    Lösung: Stelle sicher, dass du die Kriterien in deiner Combobox korrekt definiert hast, insbesondere für die leeren Zellen. Der Code sollte Criteria1:="=" für leere Zellen verwenden.

  • Fehler: Der Autofilter funktioniert nicht wie erwartet.
    Lösung: Überprüfe, ob das Arbeitsblatt, auf das du zugreifst, tatsächlich Daten enthält und der Autofilter aktiviert ist.


Alternative Methoden

Wenn du nicht mit VBA arbeiten möchtest, kannst du auch die Excel Filter Funktion direkt verwenden:

  1. Wähle den Bereich aus, den du filtern möchtest.
  2. Gehe zu „Daten“ > „Filtern“.
  3. Klicke auf den Dropdown-Pfeil der Spalte, die du filtern möchtest.
  4. Wähle „Leere Zellen“ oder „Nicht leere Zellen“ aus.

Diese Methode ist besonders nützlich, wenn du nicht mit Makros arbeiten möchtest.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du den Autofilter in VBA verwenden kannst:

  1. Leere Zellen filtern:

    shSource.Range("A1").AutoFilter Field:=1, Criteria1:="="
  2. Nicht leere Zellen filtern:

    shSource.Range("A1").AutoFilter Field:=1, Criteria1:="<>"

Diese einfachen Zeilen können in deinen VBA-Code integriert werden, um die Filterung von leeren und nicht leeren Zellen zu erleichtern.


Tipps für Profis

  • Nutze das AutoFilterMode-Attribut, um schnell zu überprüfen, ob der Autofilter aktiv ist:

    If Not shSource.AutoFilterMode Then
      shSource.Range("A1").AutoFilter
    End If
  • Kombiniere mehrere Filterkriterien, um komplexere Datenanalysen durchzuführen. Dies kann durch die Verwendung von Criteria1 und Criteria2 erfolgen.


FAQ: Häufige Fragen

1. Kann ich den Autofilter auch auf mehrere Spalten anwenden?
Ja, du kannst den Autofilter auf mehrere Spalten anwenden, indem du für jede Spalte entsprechende Filterkriterien festlegst.

2. Wie filtere ich nach leeren Zellen in einer bestimmten Spalte?
Verwende den Befehl AutoFilter mit Criteria1:="=" für die gewünschte Spalte, um nur die leeren Zellen anzuzeigen.

3. Funktioniert dieser Code in allen Excel-Versionen?
Der VBA-Code sollte in den meisten modernen Excel-Versionen funktionieren, einschließlich Excel 2010 und höher.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige