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

Forumthread: VBA - Filter setzen mit Arrays

VBA - Filter setzen mit Arrays
25.01.2017 18:33:55
Ole
Hallo zusammen,
ich komme an einer Stelle nicht weiter und bitte deswegen um Hilfe.
Ich habe eine Spalte, in die Termine eingetragen werden. Es werden manchmal auch Dummy-Termine eingetragen, falls ein Termin noch nicht feststeht.
Ich möchte die Spalte Filtern: es sollen keine
- leeren Einträge vorhanden sein
- Datumsangaben mit dem Jahr 2099
- Datumsangaben mit dem Jahr 9999
enthalten sein.
Das ist meine Idee, aber es funktioniert leider nicht.
If .Cells(1, j) = "Termin " & Chr(10) & "Beschaffer" Then
.Range("A1: BZ" & LR).AutoFilter Field:=j, Criteria1:=Array(""), Operator:=xlFilterValues, Criteria2:="" & Array(0, "12/31/9999", 0, "12/31/2099")
Ich glaube der Fehler liegt in dem Array bei Criteria2.
Die umgekehrte Variante, also dass nur diese Elemente angezeigt werden sollen, funktioniert:
.Range("A1: BZ" & LR).AutoFilter Field:=j, Criteria1:=Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, "12/31/9999", 0, "12/31/2099")
Ich möchte gern die negierte Variante nutzen, weil neue Werte in die Spalte hinzukommen können.
Vielen Dank im Voraus. :)
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA - Filter setzen mit Arrays
25.01.2017 19:15:59
ChrisL
Hi Ole
Ungetestet:
    Dim datumVon As Date, datumBis As Date
datumVon = CDate("01.01.1900")
datumBis = CDate("01.01.2098")
With Worksheets("Tabelle1")
On Error Resume Next
.ShowAllData
On Error GoTo 0
.Range("A1:BZ" & LR).AutoFilter Field:=1, Criteria1:=">=" & datumVon * 1, _
Operator:=xlAnd, Criteria2:="

Quelle:
https://www.herber.de/forum/archiv/1488to1492/1489205_Aktuellen_Monat_mit_Autofilter_auslesen.html
Im alten Beitrag ging es zwar um etwas anderes, aber ich denke der Ansatz von Luschi ist auch hier anwendbar.
cu
Chris
Anzeige
AW: VBA - Filter setzen mit Arrays
26.01.2017 17:35:46
Ole
Hey,
vielen Dank für deine Hilfe. Hier sind alle immer so fix, das mag ich. :)
Das war auch ein guter Ansatz den Datumsbereich festzulegen. Ich habe es wie folgt umgesetzt:
Filterkriterium1 = keine leeren Einträge
Filterkriterium2 = nur Einträge, die ein kleineres Datum als heute + 800 Tage haben
Criteria1:=Array("<>"), Operator:=xlAnd, Criteria2:="<" & CDbl(Date+ 800)
So verändert sich die obere Grenze täglich.
Beste Grüße
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA - Filter setzen mit Arrays


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Datei und gehe zu dem Arbeitsblatt, in dem Du die Filter anwenden möchtest.

  2. Öffne den VBA-Editor mit ALT + F11.

  3. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle Einfügen > Modul.
  4. Füge den folgenden Code in das Modul ein:

    Sub FilterMitArray()
        Dim LR As Long
        Dim j As Long
        Dim datumVon As Date, datumBis As Date
    
        LR = Cells(Rows.Count, 1).End(xlUp).Row
        j = 1 ' Beispiel: Spalte A
    
        datumVon = CDate("01.01.1900")
        datumBis = CDate("01.01.2098")
    
        With Worksheets("Tabelle1")
            .AutoFilterMode = False ' Alle Filter zurücksetzen
            .Range("A1:BZ" & LR).AutoFilter Field:=j, _
                Criteria1:=Array("<>", 0), _
                Operator:=xlFilterValues, _
                Criteria2:=Array(0, "12/31/9999", 0, "12/31/2099")
        End With
    End Sub
  5. Passe die Variablen an:

    • Ändere j auf die Spalte, die Du filtern möchtest.
    • Passe datumVon und datumBis an, falls erforderlich.
  6. Führe das Makro aus: Drücke F5 oder wähle im Menü Run > Run Sub/UserForm.


Häufige Fehler und Lösungen

  • Fehler: "Der Filter kann nicht auf die angegebene Range angewendet werden"

    • Lösung: Stelle sicher, dass Du die richtige Range und das richtige Arbeitsblatt angibst. Überprüfe auch, ob die Autofilterfunktion aktiviert ist.
  • Fehler: "Typen unverträglich"

    • Lösung: Achte darauf, dass alle Daten in der Spalte, die Du filterst, denselben Datentyp haben. Mische keine Text- und Datumsformate.

Alternative Methoden

  • Verwendung der AutoFilter Methode ohne Arrays: Wenn Du nur einfache Kriterien hast, kannst Du die AutoFilter-Methode ohne Arrays verwenden:

    .Range("A1:BZ" & LR).AutoFilter Field:=j, Criteria1:="<>", Operator:=xlAnd
  • Verwendung von Advanced Filter: Für komplexere Filterkriterien könntest Du auch den Advanced Filter verwenden, der mehr Flexibilität bietet.


Praktische Beispiele

  1. Filtern nach mehreren Kriterien: Angenommen, Du möchtest nur Datensätze anzeigen, die in einer bestimmten Spalte einen Wert haben und nicht gleich einem Dummy-Wert sind. Der folgende Code zeigt, wie das geht:

    .Range("A1:BZ" & LR).AutoFilter Field:=j, _
        Criteria1:=Array("<>", "Dummy"), _
        Operator:=xlFilterValues
  2. Dynamisches Filtern: Du kannst das Filterkriterium dynamisch gestalten, sodass es sich mit dem Datum ändert:

    .Range("A1:BZ" & LR).AutoFilter Field:=j, _
        Criteria1:=Array("<>", 0), _
        Operator:=xlFilterValues, _
        Criteria2:=Array(0, Date + 800)

Tipps für Profis

  • Verwende benannte Bereiche: Erstelle benannte Bereiche für Deine Daten, um die Wartbarkeit Deines Codes zu verbessern.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen in Deinem VBA-Code, um Probleme beim Filtern zu vermeiden.
  • Optimierung der Performance: Deaktiviere die Bildschirmaktualisierung und das Berechnen von Formeln, während der Filter angewendet wird:

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    ' ... Dein Code ...
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Wie kann ich mehrere Kriterien in einem Filter verwenden?
Du kannst mehrere Kriterien in einem Array definieren und sie mit Operator:=xlFilterValues kombinieren.

2. Kann ich leere Zellen filtern?
Ja, benutze Criteria1:=Array("<>"), um alle nicht-leeren Zellen zu filtern.

3. Funktioniert das in allen Excel-Versionen?
Die vorgestellten VBA-Techniken sind in den meisten modernen Excel-Versionen (ab Excel 2007) anwendbar.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige