Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1280to1284
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Filterkriterien bei Änderung auslesen

Filterkriterien bei Änderung auslesen
18.10.2012 08:08:14
Florian
Hallo zusammen,
nachdem ich hier nun schon oft Hilfe gefunden habe, ohne explizit danach zu fragen, stehe ich nun vor einem Problem, bei dem ich weder hier noch anderswo Hilfe gefunden habe.
Es geht um Folgendes:
Ich habe eine Tabelle (Mockup hier: https://www.herber.de/bbs/user/82172.xlsm),
die in der finalen Version ca. 40 Spalten und zwischen 1.000 und 20.000 Zeilen haben wird.
Es besteht der Berdarf nach einer flexiblen Filterung (also mehr als ein Kriterium auf einmal, Verwendung auch komplexer Filter). Der normale Filter ist zwar schnell und funktioniert auch, hat aber in meinen Augen ein paar Nachteile: Es ist nicht sofort ersichtlich, welche Kriterien gefiltert sind, und es ist auch nicht klar, welche Ausprägungen gefiltert sind.
Um diese Schwächen auszubügeln, habe ich folgendes vor:
Über der Tabelle gibt es eine Zeile, in die Filterwerte eingetragen werden können. Bei Eintrag eines Filterwertes wird per "WorkSheet_Change" erkannt, der Filter in der Tabelle gesetzt, und die Spalte farblich markiert. Der Teil funktioniert wunderbar.
Andersherum soll auch erkannt werden, wenn ein Filterwert direkt in der Tabelle geändert wird. Auch dann soll die farbige Markierung vorgenommen werden und der Filterwert in die erwähnte Zelle oberhalb der Tabelle geschrieben werden.
Diesen Teil kriege ich nicht hin.
- Ich habe kein Worksheet_Change Ereignis gefunden, mit dem ich auf die Tabelle zugreifen kann
- Hilfsmethoden, um einen gesetzten Filter zu erkennen, sind nicht zuverlässig genug (Idee z.B.: Summenbildung oder Zählen sichtbarer Zeilen, um darüber ein Change-Ereignis festzustellen - aber: Wie in der beigefügten Tabelle sichtabr, können Filterwerte in einzelnen Spalten gesetzt werden, die keine Änderungen in der Filterung vornehmen - bis der Filter auch in einer anderen Spalte gesetzt wird (Hier: Filter in Spalte A ist derzeit "wirkungslos")
- Selbst wenn ich ein zuverlässiges Change-Ereignis finde, habe ich noch keine Lösung gefunden, per Makro das Filterkriterium auszulesen.
Ich denke, hier ein echt kniffliges Problem gefunden zu haben. Ich bin über jede Hilfe dankbar!
Viele Grüße,
Florian

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Filterkriterien bei Änderung auslesen
18.10.2012 08:24:17
Beverly
Hi Florian,
es gibt kein Ereignis, das durch das Setzen des Autofilters ausgelöst wird und somit auswertbar ist.
Du könntest höchstens das Calculate-Ereignis verwenden und eine volatile Funktion (z.B. Zufallszahl) in eine Zelle schreiben, die dann das Calculate-Ereignis auslöst. Das bedeutet aber, dass das Ereignis bei jeder Veränderung im Tabellenblatt ausgelöst wird.


AW: Filterkriterien bei Änderung auslesen
18.10.2012 12:03:07
Florian
Hallo Karin,
vielen Dank für die Antwort.
Mit dem calculate-Ereignis kann ich leben, ich habe es getetstet und es reagiert auf alle Filter-Änderungen. Jetzt weiss ich also, wie ich Filteränderungen abgreifen kann.
Hast Du eine Ahnung, wie ich die Filter-Werte aus dem Autofilter auslese?
Florian

Anzeige
AW: Filterkriterien bei Änderung auslesen
18.10.2012 13:49:47
Beverly
Hi Florian,
vom Prinzip her - ja, und ich habe das auch schon für die Excelversionen vor 2007 gemacht, wobei das schon sehr kompliziert war, alle Kombinationen abzudecken. Ab 2007 sind die Filtermöglichkeiten jedoch wesentlch erweitert worden, weshalb ich lieber die Finger davon gelassen habe.
Ich markiere die Frage deshalb mal als offen, vielleicht findet sich ja jemand.


AW: Filterkriterien bei Änderung auslesen
18.10.2012 14:11:09
{Boris}
Hi Florian,
vor 8 Jahren (also noch zu Excelzeiten vor 2007) habe ich mir mal diesen Code - auch mithilfe des Forums - zusammengeschustert. Damit werden die Filterkriterien ausgelesen und in ein separates Blatt ("AF-Kriterien") geschrieben.
Alles in ein allgemeines Modul kopieren und einfach mal die Sub "Aktive Filter" starten (während das Blatt mit dem Autofilter das aktive ist) und schauen, was passiert. Vielleicht hilft Dir das ein wenig weiter.
VG, Boris
Option Explicit
Option Base 1
Sub aktive_Filter()
Dim i As Integer
Dim j As Integer
Dim iCount As Integer
Dim Ash As Worksheet
Dim iCol As Integer
Dim myArray() As Variant
Dim strTemp As String
Dim lRow As Long
Dim Blatt As String
Blatt = "AF-Kriterien"
Set Ash = ActiveSheet
With Ash
If .FilterMode Then
iCol = .AutoFilter.Range.Column - 1
lRow = .AutoFilter.Range.Row
For i = 1 To .AutoFilter.Filters.Count
If .AutoFilter.Filters(i).On Then iCount = iCount + 1
Next i
ReDim myArray(iCount, 7)
For i = 1 To .AutoFilter.Filters.Count
If .AutoFilter.Filters(i).On Then
j = j + 1
myArray(j, 1) = Application.Substitute(Cells(1, i + iCol).Address(0, 0), 1, "")
myArray(j, 2) = Trim(Application.Substitute(Application.Substitute(.Cells(lRow,  _
i + iCol), _
Chr(10), " "), "-", ""))
strTemp = .AutoFilter.Filters(i).Criteria1
myArray(j, 3) = Bedingung(strTemp)
myArray(j, 4) = Bereinigen(strTemp)
strTemp = ""
If .AutoFilter.Filters(i).Operator  0 Then
myArray(j, 5) = IIf(.AutoFilter.Filters(i).Operator = xlAnd, "und", "oder")
strTemp = .AutoFilter.Filters(i).Criteria2
myArray(j, 6) = Bedingung(strTemp)
myArray(j, 7) = Bereinigen(strTemp)
strTemp = ""
End If
End If
Next i
Else
MsgBox "Der Autofiltermodus ist im aktiven Blatt nicht aktiv...", , "Kleiner Hinweis..." _
If BlattExistent(Blatt) Then Worksheets(Blatt).Cells.ClearContents
Exit Sub
End If
End With
If BlattExistent(Blatt) = False Then
Application.ScreenUpdating = False
Worksheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Blatt
Ash.Activate
Application.ScreenUpdating = True
End If
With Worksheets(Blatt)
.Cells.ClearContents
.[a1:g1] = Array("Spalte", "Überschrift", "Bedingung 1", "Kriterium 1", "Operator", " _
Bedingung 2", "Kriterium 2")
.[a1:g1].Font.Bold = True
If iCount Then .Range("A2:G" & iCount + 1) = myArray
.Columns("A:G").AutoFit
End With
End Sub
Function Bedingung(str As String) As String
With WorksheetFunction
If Len(str) - Len(.Substitute(.Substitute(str, "=", ""), "*", "")) = 3 Then Bedingung = " _
enthält": Exit Function
If Len(str) - Len(.Substitute(.Substitute(str, "", ""), "*", "")) = 4 Then Bedingung = " _
enthält nicht": Exit Function
If InStr(1, str, "*") > 0 Then Bedingung = "endet nicht mit": Exit Function
If Len(str) - Len(.Substitute(.Substitute(str, "", ""), "*", "")) = 3 Then Bedingung = " _
beginnt nicht mit": Exit Function
If InStr(1, str, "=*") > 0 Then Bedingung = "endet mit": Exit Function
If Len(str) - Len(.Substitute(.Substitute(str, "=", ""), "*", "")) = 2 Then Bedingung = " _
beginnt mit": Exit Function
If InStr(1, str, " 0 Then Bedingung = "kleiner oder gleich": Exit Function
If InStr(str, ">=") > 0 Then Bedingung = "größer oder gleich": Exit Function
If InStr(1, str, "") > 0 Then Bedingung = "entspricht nicht": Exit Function
If InStr(1, str, " 0 Then Bedingung = "kleiner als": Exit Function
If InStr(1, str, ">") > 0 Then Bedingung = "größer als": Exit Function
If InStr(1, str, "=") > 0 Then Bedingung = "entspricht": Exit Function
Bedingung = ""
End With
End Function
Function Bereinigen(str As String) As String
With WorksheetFunction
Bereinigen = .Substitute(.Substitute(.Substitute(.Substitute(str, ">", ""), "

Anzeige
AW: Filterkriterien bei Änderung auslesen
18.10.2012 18:53:59
Florian
Hallo Boris,
vielen Dank schonmal - das sieht gut aus. Ich muss mich da noch ein bisschen reinarbeiten, derzeit tut es nicht, auch nachdem ich die Tabellenformatierung bei mir gekickt habe und auf "normalen" Autofilter umgestellt habe - aber das kriege ich mit ein bisschen Zeit hin.
Ich melde mich nochmal, wenn ich mit dem Thema durch bin.
Viele Grüße und vielen Dank an alle,
Florian

AW: Filterkriterien bei Änderung auslesen
18.10.2012 08:29:21
Klaus
Hallo Florian,
vorab: der Link ist nicht gut, er versucht die Zeichen "Klammer zu komma" mit im Link zu öffnen.
https://www.herber.de/bbs/user/82172.xlsm
Ich hab nur ne Idee für einen Workaround: Blende die Zeile 5 (da steht der Filter) einfach aus, und kopiere die Überschriften in Zeile 4.
Jetzt kann der Filter nur noch per Makro bedient werden.
Grüße,
Klaus M.vdT.

Anzeige
AW: Filterkriterien bei Änderung auslesen
18.10.2012 12:10:17
Florian
Hallo Klaus,
sorry wegen dem Link und vielen Dank für den Vorschlag. Daran dachte ich auch (und das ist die letztmögliche Lösung), allerdings kann ich dann leider keine komplexen Filter mehr nutzen (Zahlen zwischen x und y, Filter nach Farbe, Mehrfachselektion...). Auf diese Möglichkeiten würde ich nur ungern verzichten.
Danke nochmals,
Florian

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige