Discussion:
Autofilter Kriterien
(zu alt für eine Antwort)
Jörg Böhmichen
2006-02-27 14:01:29 UTC
Permalink
Hallo NG,
neue Frage zum Thema 'AutoFilter':

das gerade AKTIVE Kriterium eines Autofilters erhält man mit
Autofilter.Filters(i).Criteria, wenn ActiveSheet.Filters.On=True.

Wie kann ich aber alle Werte auslesen, die mir der Autofilter
anbietet (außer <Leer>, >Nicht leer>. <Top 10...> und
<Benutzerdefiniert>)?

Vielen Dank im voraus für Eure Hilfe!
Jörg
Thomas Ramel
2006-02-27 14:08:46 UTC
Permalink
Grüezi Jörg

Jörg Böhmichen schrieb am 27.02.2006
Post by Jörg Böhmichen
das gerade AKTIVE Kriterium eines Autofilters erhält man mit
Autofilter.Filters(i).Criteria, wenn ActiveSheet.Filters.On=True.
Wie kann ich aber alle Werte auslesen, die mir der Autofilter
anbietet (außer <Leer>, >Nicht leer>. <Top 10...> und
<Benutzerdefiniert>)?
Ich gleich nochmal :-)

Die effektiv gesetzten Filter kannst Du auch über eine UDF auslesen lassen:

Public Function AF_KRIT(Bereich As Range) As String
'Liest die Kriterien des Autofilters aus und listet diese in einer Zelle
'Als Bezug dient die erste Zelle nach dem Spaltentitel: AF_KRIT(A2)

Dim s_Filter As String

s_Filter = ""
On Error GoTo Ende
With Bereich.Parent.AutoFilter
With .Filters(Bereich.Column - .Range.Column + 1)
s_Filter = .Criteria1
Select Case .Operator
Case xlAnd
s_Filter = s_Filter & " UND " & .Criteria2
Case xlOr
s_Filter = s_Filter & " ODER " & .Criteria2
End Select
End With
End With
Ende:
AF_KRIT = s_Filter
End Function


Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Jörg Böhmichen
2006-02-28 06:41:26 UTC
Permalink
Hallo Thomas,
erstmal vielen Dank für Deine Tipps!
Post by Thomas Ramel
Wie meinst Du das genau?
Die Einträge die im DropDown anwählbar sind?
Am einfachsten mit einem Spezialfilter ohne Duplikate über die Spalte.
....
Post by Thomas Ramel
Public Function AF_KRIT(Bereich As Range) As String
Der Spezialfilter ohne Duplikate blendet alle Zeilen aus, deren
Wert in der Filterspalte schon einmal auftauchte -- nur die Zeile
mit dessen erstem Vorkommen bleibt angezeigt. Zurücksetzen
kann ich den Spezialfilter im Menü Daten/Filter/Alle anzeigen.

Der zweite Vorschlag liefert mir die aktiven Filterkriterien eines
Autofilters. Nee, was ich meinte, sind alle Werte, die mir der
Autofilter in der Dropdown-Liste anbietet.

Wenn ich den Spezialfilter setze und die Filterspalte dann wohin
kopiere, habe ich die Werte, die mich interessieren. Die Lösung
ist ohnehin nur noch akademischer Natur, weil ich den Weg nicht
weiterverfolge.

Trotzdem vielen Dank!
Jörg
Thomas Ramel
2006-02-28 06:57:58 UTC
Permalink
Grüezi Jörg

Jörg Böhmichen schrieb am 28.02.2006
Post by Jörg Böhmichen
erstmal vielen Dank für Deine Tipps!
Aber gerne doch
Post by Jörg Böhmichen
Post by Thomas Ramel
Am einfachsten mit einem Spezialfilter ohne Duplikate über die Spalte.
Public Function AF_KRIT(Bereich As Range) As String
Der Spezialfilter ohne Duplikate blendet alle Zeilen aus, deren
Wert in der Filterspalte schon einmal auftauchte -- nur die Zeile
mit dessen erstem Vorkommen bleibt angezeigt. Zurücksetzen
kann ich den Spezialfilter im Menü Daten/Filter/Alle anzeigen.
Einerseits ja, doch er kann noch mehr....
Post by Jörg Böhmichen
Der zweite Vorschlag liefert mir die aktiven Filterkriterien eines
Autofilters. Nee, was ich meinte, sind alle Werte, die mir der
Autofilter in der Dropdown-Liste anbietet.
...dann ist das nun geklärt....
Post by Jörg Böhmichen
Wenn ich den Spezialfilter setze und die Filterspalte dann wohin
kopiere, habe ich die Werte, die mich interessieren. Die Lösung
ist ohnehin nur noch akademischer Natur, weil ich den Weg nicht
weiterverfolge.
...doch das wäre schade ;-)

Die Daten des Spezialfilters kannst Du auch gleich an einen anderen Ort
kopieren lassen, ohne dass die Quelldaten gefiltert werden - diese
kopierten Werte entsprechen dann exakt dem Auswahl-DropDown des
Autofilters.

Zeichne den Vorgang mir dem Marko-Recorder auf und Du kannst den Code dann
immer wieder verwenden wenn neue Daten hinzugekommen sind.
Das kann dann z.B. für Daten der Spalte A wie folgt aussehen, wenn sie nach
Spalte E kopiert werden:

Range("A:A").AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=Range("E1"), _
Unique:=True
Range("E:E").Sort _
Key1:=Range("E1"), _
Order1:=xlAscending, _
Header:=xlYes

Wenn Du dies nun ans Worksheet_Change() Ereignis knüpfst, hast Du in Spalte
E immer die Daten, die im Autofilter-DropDown zur Verfügung stehen.
Diese kannst Du dann z.B. mit einem dynamischen Bereichsnamen erfassen und
in einer Gültigkeitsliste oder einem anderen Steuerelement zur Verfügung
stellen - auch per VBA kannst Du auf diesen dynamischen Bereich zugreifen
und hast im Prinzip das was Du wolltest.



Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Thomas Ramel
2006-02-27 14:07:23 UTC
Permalink
Grüezi Jörg

Jörg Böhmichen schrieb am 27.02.2006
Post by Jörg Böhmichen
das gerade AKTIVE Kriterium eines Autofilters erhält man mit
Autofilter.Filters(i).Criteria, wenn ActiveSheet.Filters.On=True.
Wie kann ich aber alle Werte auslesen, die mir der Autofilter
anbietet (außer <Leer>, >Nicht leer>. <Top 10...> und
<Benutzerdefiniert>)?
Wie meinst Du das genau?

Die Einträge die im DropDown anwählbar sind?

Am einfachsten mit einem Spezialfilter ohne Duplikate über die Spalte.



Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Loading...