Ich habe ein Excel-Tabelle und filtere mit einem Spezialfilter, den ich als VBA-Makro aufgezeichnet habe Spalten.
Es gibt mehrere Spalten, wobei immer eine Spalte gefiltert wird, daraufhin Ergebnisse angezeigt werden. Diese Ergebnisse würde ich gerne nochmal mit einem weiteren Filter filtern. Leider filtert die Funktion nochmal die komplette Liste nach dem zweiten Filterbegriff anstatt die nur noch eingeblendeten/gefilterten Zeilen nach dem ersten Filtervorgang zu filtern.
in VBA schaut die ERSTE Filterfunktion so aus:
If IsEmpty(Cells(4, 1)) = False Then
Range(„A9:smiley:1200“).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range(„I3:I4“), Unique:=False
End If
Die ZWEITE Filterfunktion dementsprechend:
If IsEmpty(Cells(4, 2)) = False Then
Range(„B9:B1200“).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range(„J3:J4“), Unique:=False
End If
Es gibt weitere Spalten die gefiltert werden, die aber analog aufgebaut und gefiltert werden sollten…
Zur If-Funktion… es wird nur gefiltert, wenn ein Suchbegriff eingegeben wurde…
Gefiltert wird jeweils zum Zeitpunkt einer Zelländerung im Worksheet/Arbeitsblatt:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Falls jemand Hilfestellung geben könnte wäre ich sehr dankbar. Kann auch ein Sample der Tabelle per Mail schicken. Falls ihr noch Infos braucht, lasst es mich wissen.
Es gibt mehrere Spalten, wobei immer eine Spalte gefiltert
wird, daraufhin Ergebnisse angezeigt werden. Diese Ergebnisse
würde ich gerne nochmal mit einem weiteren Filter filtern.
Du meinst also als UND-Verknüpfung, sodass beide Kriterien zutreffen?
Leider filtert die Funktion nochmal die komplette Liste nach
dem zweiten Filterbegriff anstatt die nur noch
eingeblendeten/gefilterten Zeilen nach dem ersten
Filtervorgang zu filtern.
Ja, da Du zwei einzelne Filter-Vorgängen nacheinander aufrufst.
Der Spezialfilter hat aber gereade den grossen Vorteil, dass Du dir kombinierten Kriterien einmal festlegen kannst und dann danach filtern.
in VBA schaut die ERSTE Filterfunktion so aus:
If IsEmpty(Cells(4, 1)) = False Then
Range(„A9:smiley:1200“).AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:= _
Range(„I3:I4“), Unique:=False
End If
Erweitere den Kriterien-Bereich auf
Range(„I3:J4“)
Es gibt weitere Spalten die gefiltert werden, die aber analog
aufgebaut und gefiltert werden sollten…
Oder ggf noch weiter (am besten über alle Spalten)
Zur If-Funktion… es wird nur gefiltert, wenn ein Suchbegriff
eingegeben wurde…
Gefiltert wird jeweils zum Zeitpunkt einer Zelländerung im
Worksheet/Arbeitsblatt:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Schreibe dann einfach die Begriffe nebeneinander in die entsprechenden Spalten, dein Code sollte dann schon alles korrekt filtern.
Ansonsten lade eine Demo-Mappe auf einen WebSpace hoch und nenne hier den Link.
Vielen Dank schonmal für die Hilfe.
Der Grund warum ich das gemacht habe ist, dass ich beim Filtern einer Spalte oder mehrere Spalten teilweise auch leere Zellen habe. Bei Aktivierung des Filters über mehrere Spalten werden Zeilen mit leeren Zellen natürlich rausgefiltert - was ich nicht will. Das kann ich umgehen indem ich den Filter nur jeweils über einzelne Spalten laufen lasse, dadurch Zeilen beibehalte, die in Nachbarspalten leere Zellen haben.
Des weiteren kommt Zwischendrin eine Spalte mit einer Jahreszahl vor (was für mich aber eine schon zu grobe Lösung darstellt, da ich eigentlich zumindest ein Datum im Format MM/JJJJ hätte) was einen Filter über den geforderten Datenbereich mit meinen Fähigkeiten in Excel und VBA momentan ein bisschen kniffelig bis unmöglich macht. Hier habe ich mir mit einem Hilfsfeld ausgeholfen, und bei leerer Eingabe >0 im Hilfsfeld als Suchkriterium stehen, bei Zahlen dann das „>“&Bezugszelle was mir dann etwas wie z.B. „>1998“ filtert…
Der Grund warum ich das gemacht habe ist, dass ich beim
Filtern einer Spalte oder mehrere Spalten teilweise auch leere
Zellen habe. Bei Aktivierung des Filters über mehrere Spalten
werden Zeilen mit leeren Zellen natürlich rausgefiltert - was
ich nicht will. Das kann ich umgehen indem ich den Filter nur
jeweils über einzelne Spalten laufen lasse, dadurch Zeilen
beibehalte, die in Nachbarspalten leere Zellen haben.
Hmmm, sobald Du aber in den weiteren Spalten ebenfalls Kriterien anlegst, werden auch diese gefiltert. Alle anderen Spalten (egal welchen Inhalt sie haben) werden vim Filter nicht tangiert.
Daher kannst Du IMO in den Spalten, die dich interessieren einen Werte eintragen und erhältst dann das kombinierte Ergebnis.
Des weiteren kommt Zwischendrin eine Spalte mit einer
Jahreszahl vor (was für mich aber eine schon zu grobe Lösung
darstellt, da ich eigentlich zumindest ein Datum im Format
MM/JJJJ hätte) was einen Filter über den geforderten
Datenbereich mit meinen Fähigkeiten in Excel und VBA momentan
ein bisschen kniffelig bis unmöglich macht. Hier habe ich mir
mit einem Hilfsfeld ausgeholfen, und bei leerer Eingabe >0 im
Hilfsfeld als Suchkriterium stehen, bei Zahlen dann das
„>“&Bezugszelle was mir dann etwas wie z.B. „>1998“ filtert…
Hmmm, auch mit Datum lässt sich im Spezialfilter trefflich und einfach filtern. Die Kriterien kannst Du ja jeweils von Hand direkt in die entsprechenden Spalten im Krtitereinbereich eintragen.
Ich denke es wird das einfachste sein, wenn Du eine Demo-Mappe erstellst und sie auf einen WebSpace hochlädst. Wenn Du dann hier den Link nennst können wir uns das Ganze ‚live‘ ansehen.
Ansonsten kannst Du mal die folgende Mappe testen, die ein paar Dummy-Daten enthält sowie einige Tabellenblätter - das Ganue mit VBA ein wenig automatisiert.
Der Grund warum ich das gemacht habe ist, dass ich beim
Filtern einer Spalte oder mehrere Spalten teilweise auch leere
Zellen habe. Bei Aktivierung des Filters über mehrere Spalten
werden Zeilen mit leeren Zellen natürlich rausgefiltert - was
ich nicht will. Das kann ich umgehen indem ich den Filter nur
jeweils über einzelne Spalten laufen lasse, dadurch Zeilen
beibehalte, die in Nachbarspalten leere Zellen haben.
Ich habe deine Mappe erhalten und gesehen, dass das Ganze sehr ähnlich dem ist, das ich dir als Demo-Mappe verlinkt habe.
Ich denke, dass Du dein Problem sehr einfach lösen könntest.
Ersetze deinen VBA-Code durch die folgenden Zeilen:
Private Sub Worksheet\_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A4:E4")) Is Nothing Then
Range("A9:E1200").AdvancedFilter \_
Action:=xlFilterInPlace, \_
CriteriaRange:=Range("I3:m4"), \_
Unique:=False
End If
End Sub
Nun wird jedesmal gefiltert wenn Du im Bereich A4:E4 etwas eingetragen und Return gedrückt hast.