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

Forumthread: VBA Excel Autofilter Filterkriterium auslesen

VBA Excel Autofilter Filterkriterium auslesen
30.08.2016 15:17:41
AHK
Liebe Forumsmitglieder,
ich habe eine Frage bezüglich des Autofilters in Excel.
Ich habe In Spalte A die Bezeichnung eines Messwerts, in Spalte B die zugehörige Messgröße.
Ich filtere Spalte A z.B. mit "DG*". Der Filter zeigt mir alle Messungen an die mit der Bezeichnung "DG" beginnen. Siehe--> https://www.herber.de/bbs/user/107903.xlsm Achtung der Filter ist mit DG* bereits gesetzt.
Nun möchte ich per VBA das Filterkriterium auslesen (d.h. den Filterbegriff "DG*"). Diesen möchte ich in eine Variable ablegen. Diese Variable, möchte ich später in der Überschrift einer Grafik verwenden, um die Grafik eindeutig den Filterkriterien zuordnen zu können.
Habe schon viel im Forum gestöbert, aber noch nicht das richtige gefunden. Alle Tipps basieren auf der Rückmeldung mittels AutoFilter.Filters(1).Criteria1
Dieses liefert mir aber quasi ja schon das konkrete Ergebnis des Filters.
Folgendes quick-and-dirty MAKRO liefert mir z.B. crit = "DG004". Ich benötige aber die originäre Eingabe im Filter "DG*".
Sub Makro1()
crit = Worksheets("Tabelle1").AutoFilter.Filters(1).Criteria1
End Sub
Hat jemand einen Tipp, wie ich den originären Filterbegriff in eine Variable ablegen kann?
Vielen Dank.
Viele Grüße,
AHK
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Eine Vermutung...
30.08.2016 16:03:51
Michael
Hallo AHK!
Aus meiner Sicht ist das nicht möglich, war mir so aber auch nicht bewusst. Ich hab Deinen Vorgang mal kurz per Makrorecorder aufgezeichnet... auch der setzt als Kriterium gleich das Ergebnis der Suche, nicht das in der Filtersuche eingegebene Kriterium (zB "DG*").
Wenn Du Filterergebnisse zusammen mit den Suchkriterien dokumentieren willst, würde ich hier auf eine Variante mit Spezialfilter (statt AutoFilter) setzen. Nachdem im Spezialfilter die Kriterien in einem eigenen Blattbereich definiert werden, kannst Du sie von dort auch problemlos auslesen (und in einer Variablen speichern etc.). Das kann in Kombination mit VBA genauso dynamisch und praktisch ablaufen, wie ein Autofilter.
LG
Michael
Anzeige
AW: VBA Excel Autofilter Filterkriterium auslesen
30.08.2016 17:33:52
KlausF
Hallo,
aus meiner Sammlung, probier mal:
Public Function ShowFilter(rng As Range)
'UDF that displays the filter criteria.
'posted by Tom Ogilvy 1/17/02
'To make it respond to a filter change, tie it to the subtotal command.
'=showfilter(B2)&CHAR(SUBTOTAL(9,B3)*0+32)
'So the above would show the criteria for column B
Dim filt As Filter
Dim sCrit1 As String
Dim sCrit2 As String
Dim sop As String
Dim lngOp As Long
Dim lngOff As Long
Dim frng As Range
Dim sh As Worksheet
Set sh = rng.Parent
Application.Volatile
If sh.FilterMode = False Then
ShowFilter = "Alle"
Exit Function
End If
Set frng = sh.AutoFilter.Range
If Intersect(rng.EntireColumn, frng) Is Nothing Then
ShowFilter = CVErr(xlErrRef)
Else
lngOff = rng.Column - frng.Columns(1).Column + 1
If Not sh.AutoFilter.Filters(lngOff).On Then
ShowFilter = "No Conditions"
Else
Set filt = sh.AutoFilter.Filters(lngOff)
On Error Resume Next
sCrit1 = filt.Criteria1
sCrit2 = filt.Criteria2
lngOp = filt.Operator
If lngOp = xlAnd Then
sop = " And "
ElseIf lngOp = xlOr Then
sop = " or "
Else
sop = ""
End If
ShowFilter = sCrit1 & sop & sCrit2
End If
End If
End Function
Gruß
Klaus
Anzeige
Nein, das ist auch nicht was der TE sucht...
30.08.2016 18:28:11
Michael
Klaus,
...so lässig diese, Deine UDF auch ist - aber auch die bringt als Kriterium das entsprechende Filterergebnis und nicht den Eingabewert in das Filter-Suchfeld:
Userbild
Userbild
Userbild
Deshalb ich ähnliches von mir auch nicht vorgeschlagen... Ich meine das geht nicht.
LG und schönen Abend
Michael
Anzeige
Bei mir schon
30.08.2016 19:55:13
KlausF
Hallo Michael,
bei mir (Mac, Excel 2003) gibt Dein exakt nachgestelltes Beispiel als Ergebnis:
=Da*
Ich habe im Filter unter "Benutzerdefiniert" bei "Beginnt mit" Da eingegeben ...
Gruß
Klaus
AW: Bei mir schon
30.08.2016 21:47:22
AHK
Hallo Ihr Zwei,
leider klappt es mit der UDF bei mir irgendwie nicht.
Code in ein Modul kopiert und gespeichert. Modul / public function wird korrekt ausgeführt. Kein Problem.
Ich hatte zunächst etwas Probleme mit der Formel in der Zelle:
=showfilter(B2)&CHAR(SUBTOTAL(9,B3)*0+32)
Ich habe die deutsche Version und da hat Excel mit den Funktionsnamen auf Englisch Probleme. Zusätzlich musste ich in der Klammer bei SUBTOTAL ein Semikolon anstelle Komma setzen.
Meine an die Deutsche Version und auf Filter Spalte A angepasste Formel:
=showfilter(A2)&ZEICHEN(TEILERGEBNIS(9;A3)*0+32)
Dies liefert mir allerdings als Ergebnis: = DG004 or =DG005
Also nicht den von mir original eingegeben Filter "DG*"
Habe ich einen Fehler in der "übersetzten" Formel?

Was mich zudem wundert, wenn ich z.B. nach "AB*" filtere bleibt die "showfilter"-Zelle leer. Es wird auch kein Fehler angezeigt. Ich habe in meiner Tabelle noch einen Wert DG006 ergänzt und erneut mit "DG*" gefiltert. Auch hier bleibt die Zelle nun leer ?!?
@Klaus:
Was zeigt Dir denn die UDF an, wenn Du in Michaels Beispiel nach "Do*" filterst?
Da ist ja auch nur ein Wert mit Da* enthalten, nämlich Dada. Zeigt er Dir wirklich "Da*" oder "Dada" ?
Ich würde mich riesig freuen, wenn es damit klappen würde.
Habe ich irgendwo einen Fehler gemacht?
Anbei die Datei mit UDF: https://www.herber.de/bbs/user/107912.xlsm
Viele Grüße,
AHK
Anzeige
AW: Bei mir schon
30.08.2016 22:04:31
KlausF
Hi,
bei mir zeigt die UDF dann =*Do**
und der gefilterte Wert ist korrekt Doro
Gefiltert ist unter Benutzerdefiniert mit der Option Enthält
Gruß
Klaus
AW: Bei mir schon
30.08.2016 22:24:51
KlausF
Hi.
Habe mal Deine Datei runter geladen. Das gleiche Ergebnis.
Die Formel lautet aber nur =showfilter(A2) und die
Filterung muss nur als AB ohne Sternchen eingegeben werden.
Der Stern ist ja schon in der Option "Enthält" eingebaut.
Wenn's jetzt immer noch nicht klappt weis ich auch nichts mehr.
Ich bekomme damit jedenfalls die ersten 3 Zeilen gefiltert
und die UDF wirft =AB* bzw =*AB* aus je nach Option "Beginnt mit"
oder "Enthält" ...
Gruß
Klaus
Anzeige
AW: Bei mir schon
30.08.2016 22:06:41
Andre
Hallo Klaus,
erstmal Entschuldigung, dass ich mit Pseudonym gepostet habe. Habe ich erst grad in den Forumsregeln gelesen. Ich heiße Andre.
Ich hatte den entscheidenden Hinweis von Dir übersehen!
Wenn ich dies im benutzerdefinierten Filter wie von Dir vorgeschlagen eingebe, dann klappt dies. Ich erhalte als Ergebnis =DG**.
Gebe ich dies in Excel hingegen direkt im Suchfeld des Filters ein, dann klappt dies nicht. Das wäre natürlich wünschenswert. Falls Du eine Idee hast, wie man es auch damit hinbekommt, wäre ich froh.
Hiermit geht es nicht:
Userbild
Aber erstmal hilft mir der benutzerdefinierte Filter riesig.
Viele Grüße,
Andre
Anzeige
Antwort hat sich überschnitten
30.08.2016 22:36:39
KlausF
Hallo Andre,
vergiss die letzte Antwort - hat sich mit Deiner neuen Frage überschnitten.
Dein Wunsch kann natürlich nicht klappen weil diese UDF uralt ist und es
seinerzeit diese neue Art der Filterung noch gar nicht gab.
Ich kann mal in meinem Archiv wühlen ob sich noch eine neuere UDF
finden lässt, habe aber wenig Hoffnung. Ansonsten melde ich mich noch einmal.
Gruß
Klaus
Anzeige
Ich sag ja, das geht nicht...
31.08.2016 00:58:09
Michael
Hi Ihr beiden!
Die UDF von Klaus ist spitzenmäßig, aber ich habe es eben von Anfang an so verstanden, dass es um eine Filterung über das Such-/Eingabefeld geht - und das lässt sich nicht anders auslesen; ein starkes Indiz mE dafür ist, dass auch der Makrorekorder hier nichts besseres zustande bringt.
Aber parallel zu der von mir vorgeschlagenen Routine wäre Klaus' Vorgehensweise über den Benutzerdefinierten Filter evtl. ja auch schon ein brauchbarer Workaround...
Gute Nacht Ihr beiden!
LG
Michael
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Excel Autofilter: Filterkriterium auslesen


Schritt-für-Schritt-Anleitung

Um das Filterkriterium in Excel VBA auszulesen, kannst Du die folgenden Schritte befolgen:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".

  3. Kopiere den folgenden VBA-Code in das Modul:

    Function GetFilterCriteria(rng As Range) As String
       Dim filt As Filter
       Dim crit As String
       Dim lngOff As Long
    
       If rng.Worksheet.AutoFilterMode = False Then
           GetFilterCriteria = "Kein Filter aktiviert"
           Exit Function
       End If
    
       Set filt = rng.Worksheet.AutoFilter.Filters(1)
       If Not filt.On Then
           GetFilterCriteria = "Kein Filter für diese Spalte"
           Exit Function
       End If
    
       crit = filt.Criteria1
       GetFilterCriteria = crit
    End Function
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Verwende die Funktion in einer Zelle, indem Du =GetFilterCriteria(A2) eingibst. Ersetze A2 durch die Zelle, die im Filter verwendet wird.


Häufige Fehler und Lösungen

  • Fehler: "Kein Filter aktiviert"
    Lösung: Stelle sicher, dass Du einen Autofilter auf die Daten angewendet hast. Gehe zu "Daten" > "Filter" > "AutoFilter".

  • Fehler: "Kein Filter für diese Spalte"
    Lösung: Prüfe, ob der Autofilter tatsächlich für die angegebene Spalte aktiv ist.

  • Fehler: Die Funktion gibt das Filterergebnis anstatt des Filterkriteriums zurück.
    Lösung: Stelle sicher, dass Du das richtige Argument an die Funktion übergibst und dass der Filter korrekt gesetzt ist.


Alternative Methoden

  1. Verwendung eines Spezialfilters:
    Wenn Du mehrere Kriterien benötigst, kannst Du einen Spezialfilter nutzen. Hierbei definierst Du die Kriterien in einem separaten Bereich und kannst diese einfach auslesen.

  2. Benutzerdefinierte Filter:
    Du kannst auch die benutzerdefinierten Filteroptionen in Excel verwenden. Hierbei kannst Du spezifische Filterkriterien direkt eingeben, was das Auslesen der Filterkriterien erleichtert.


Praktische Beispiele

Hier sind einige Beispiele, wie Du den VBA Autofilter auslesen kannst:

  • Wenn Du Spalte A nach "DG" filterst, gibt die Funktion GetFilterCriteria(A2) den Wert "DG" zurück, solange der Filter aktiv ist.
  • Bei der Verwendung eines Spezialfilters könntest Du die Kriterien in einer Tabelle auflisten und diese zur Analyse verwenden.

Tipps für Profis

  • Verwende Option Explicit am Anfang Deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind und um Fehler zu vermeiden.
  • Nutze die Application.Volatile Methode, wenn Du sicherstellen möchtest, dass Deine Funktion bei jeder Berechnung aktualisiert wird.
  • Teste regelmäßig Deine UDFs, um sicherzustellen, dass sie auch in verschiedenen Szenarien korrekt funktionieren.

FAQ: Häufige Fragen

1. Ist es möglich, den Filterbegriff direkt im Suchfeld auszulesen?
Nein, das Auslesen des Suchfeldes ist mit den Standardmethoden in VBA nicht möglich. Der Autofilter gibt lediglich das Ergebnis zurück.

2. Welche Excel-Version benötige ich für die obigen Methoden?
Die beschriebenen Methoden sollten in Excel 2007 und späteren Versionen funktionieren. Ältere Versionen könnten Einschränkungen haben.

3. Wie kann ich die Funktion anpassen, um mehrere Filterkriterien auszulesen?
Du kannst die Funktion erweitern, um Criteria2 und den Operator auszulesen, um komplexere Filterkriterien zu berücksichtigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige