107. Nach aktiver Zelle filtern

Aufgabenstellung:

In dieser Beispieldatei geht es um das Filtern des Wertes der aktivierten Zelle. Damit muss bei langen Listen nicht der zu filternde Wert aus dem Filter-DropDown-Menü herausgesucht werden, sondern man kann die Zelle eines einen bestimmten Wertes markieren und dann danach filtern.


Diese Beispiele stehen auch als Beispieldatei zum Download zur Verfügung.

In der Zipdatei befindet sich eine xls-Datei für Excel 2000 - 2003 und eine xlsm-Datei für Excel 2007.



Aufbau des Tabellenblatts:

 ABCD
1Überschrift 1Überschrift 2Überschrift 3 
2Wert 1Wert 10Wert 100 
3Wert 2Wert 20Wert 200 
4Wert 3Wert 30Wert 300 
5Wert 4Wert 40Wert 400 
6Wert 5Wert 50Wert 500 
7Wert 6Wert 60Wert 600 
8Wert 7Wert 70Wert 700 
9Wert 8Wert 80Wert 800 
10Wert 9Wert 90Wert 900 
11Wert 10Wert 100Wert 1000 
12Wert 1Wert 10Wert 100 
13Wert 2Wert 20Wert 200 
14Wert 3Wert 30Wert 300 
15Wert 4Wert 40Wert 400 
16Wert 5Wert 50Wert 500 
17Wert 6Wert 60Wert 600 
18Wert 7Wert 70Wert 700 
19Wert 8Wert 80Wert 800 
20Wert 9Wert 90Wert 900 
21Wert 10Wert 100Wert 1000 
22Wert 1Wert 10Wert 100 
23Wert 2Wert 20Wert 200 
24Wert 3Wert 30Wert 300 
25Wert 4Wert 40Wert 400 
26Wert 5Wert 50Wert 500 
27Wert 6Wert 60Wert 600 
28Wert 7Wert 70Wert 700 
29Wert 8Wert 80Wert 800 
30Wert 9Wert 90Wert 900 
31Wert 10Wert 100Wert 1000 
32    

 


Realisiert wurde das durch eine VBA-Lösung.

Makro zum Filtern nach dem Wert der aktiven Zeile.

Der Code ist in ein StandardModul einzufügen


Option Explicit


'Globale Variablen deklarieren. Global deswegen, damit man im gesamten VBA-Projekt _
 auf die Variablen und deren gespeicherten Werte zurückgreifen, um den aktuell _
 gespeicherten Wert zu ermitteln, kann.
Public iFilterRow As Integer
Public iFilterColumn As Integer

Dim iLastRow As Long

Sub Autofilter_aktive_Zelle()
'letzte Zeile in einem bestimmten Bereich, hier B bis D, ermitteln
iLastRow = Range("B:D").Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
'Aus der aktiven Zelle die Zeile ermitteln und in Variable "iFilterRow" schreiben
iFilterRow = ActiveCell.Row
'Aus der aktiven Zelle die Spalteindexzahl ermitteln und in Variable "iFilterRow" schreiben
iFilterColumn = ActiveCell.Column
'Wenn die aktuell markierte Zelle nicht leer ist, dann nach der Zelle filtern
If IsEmpty(ActiveCell) = False Then _
Range("A1:C" & iLastRow).AutoFilter Field:=iFilterColumn, _
Criteria1:=Cells(iFilterRow, iFilterColumn)
End Sub
 

 

Makro zum Aufheben des Filters nach dem Wert der aktiven Zeile

Der Code ist in ein StandardModul einzufügen


Option Explicit


'Globale Variablen deklarieren. Global deswegen, damit man im gesamten VBA-Projekt _
 auf die Variablen und deren gespeicherten Werte zurückgreifen, um den aktuell _
 gespeicherten Wert zu ermitteln, kann.
Public iFilterRow As Integer
Public iFilterColumn As Integer

Dim iLastRow As Long

Sub Autofilter_zurück()
Dim iFilterColumnPrüf As Filter
'letzte Zeile in einem bestimmten Bereich, hier B bis D, ermitteln
iLastRow = Range("B:D").Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
'Bei Auftreten eines Fehlers, weil z.B. die Variable "iFilterColumn" den _
 Wert 0 enthält, zur Sprungmarke "Errorhandler" springen
On Error GoTo errorhandler
'Autofilter auf Einstellung "Alle" stellen
Range("A1:C" & iLastRow).AutoFilter Field:=iFilterColumn
'Zelle, nach der gefiltert wurde, markieren, Zeile und Spalte kommen aus den _
 beiden globalen Variablen "iFilterRow" und "iFilterColumn", die die _
 Zeilennummer und die Spaltennummer enthalten, die beim Ausführen des Makros _
 "Auofilter_aktive_Zelle" in diese Variablen geschrieben wurden
Cells(iFilterRow, iFilterColumn).Select
'Prozedur beenden
Exit Sub
'Sprungmarke "Errorhandler" definieren
errorhandler:
'In Variable "iFilterColumn" den Wert 0 schreiben
iFilterColumn = 0
'Wenn Autofilter im aktuellen Tabellenblatt aktiviert wurde, dann...
If ActiveSheet.AutoFilterMode Then
    '...For/Each-Schleife starten um die Spalte, nach der gefiltert wurde, zu ermitteln
    For Each iFilterColumnPrüf In ActiveSheet.AutoFilter.Filters
        'Variable "iFilterColumn" um den Wert 1 erhöhen
        iFilterColumn = iFilterColumn + 1
        'Wenn es sich bei der Spalte, die aktuell durch die For/Each-Schleife angesprochen _
         wird, um die Spalte handelt, bei der die Eigenschaft auf "On" steht, da nach dieser _
         Spalte gefiltert wurde, dann...
        If iFilterColumnPrüf.On Then
            '...den Filter in dieser Spalte wieder auf "Alle" stellen
            Range("A1:C" & iLastRow).AutoFilter Field:=iFilterColumn
        'Abfrage Ende
        End If
    'Nächsten Schleifendurchlauf starten
    Next
'Abfrage Ende
End If
End Sub

 

 


Dieses Beispiel wurde unter den in der Tabelle aufgeführten Versionen getestet.

  A B C D E
1        

2

 

Excel - Version

Getestet

 
3      
4   Excel 2007 12.0 a  
5   Excel 2003 11.0 a  
6   Excel 2002 10.0 a  
7   Excel 2000 9.0 a  
8   Excel 97 8.0    
9          
10   Anzahl der Downloads:

 
11          
12   Dieses Beispiel wurde bereits  x aufgerufen.  
13    
14          

 


> Beispieldatei herunterladen <

  Sollten beim Ausführen der Beispieldatei Fehler auftreten, bitte ich darum, mir eine Mail mit der Fehlerbeschreibung an fehler@excelbeispiele.de zu schicken.
Danke!

 Möchten Sie www.excelbeispiele.de in Ihre Favoriten aufnehmen? Dann Klicken Sie hier.
 

Kontakt:

letzte Aktualisierung am 06.01.2008

© 2004 - Copyright Oliver Scheckelhoff,
All Rights Reserved