Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Sortieren nach markierter Zelle wie Autofilter





Frage

Hallo an die Spezialisten, Vorgeschichte: Ich kopiere Artikelzeilen auftragsbezogen untereinander in eine Tabelle und will die Artikel von vorherigen Aufträgen vergleichen Habe Excel 2000 und Win 2000 Mein Wunsch zum Zeitsparen: Ich will irgend eine Zelle markieren (zb in der Spalte Artikelnummer) und dann sollen wie beim Autofilter die gleichen Zeilen aussortieren werden. Also gleich wie Autofilter nur direkt von der Zelle aus. Es geht im Moment über Autofilter nur dass ich dort die Teilenummer suchen muss, die ich eigentlich in der Zelle schon habe. Vielen Dank schon im voraus... ...Ottmar

Antwort 1 von coros

Hallo Ottmar,

nachfolgendes Makro filtert Dir Deine Daten nach der aktiven Zelle.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Option Explicit

Sub Auofilter_aktive_Zelle()
If IsEmpty(ActiveCell) = False Then _
Range("A1:C" & Range("C65536").End(xlUp).Row).AutoFilter Field:=ActiveCell.Column, Criteria1:=ActiveCell
End Sub

Du musst in dem Makro noch den Spaltenbereich anpassen. Im Beispiel ist es der Bereich A1 bis C letzte beschriebene Zeile. Dazu musst Du im Makro die Spaltenbezeichnung "C" ändern. Also wenn es bei Dir bis zur Spalte G geht, dann überall wo "C" steht, "G" eintragen. Das gleiche gilt, wenn ´Deine Daten nicht in Spalte A, sondern in einer anderen Spalte anfangen, dann überall wo die Spaltenbezeichnung A im Makro steht, Deinen Spaltenbuchstaben eintragen.

Ich hoffe, Du meintest das so.

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

Bei Fragen melde Dich.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von Mondlicht

Hi Oliver,

nach kürzester Zeit die perfekte Antwort...
...das verdient meinen uneingeschränkten Respekt.

Vielen Dank funzt super!!!

Ist ein kleines Weihnachtsgeschenk!
Da ich "zwischen den Tagen" eine Menge Zeit sparen werde!!

Dir schöne Weihnachten und nochmals danke.

Gruß Ottmar!

Antwort 3 von Mondlicht

Beim Testen bin ich jetzt drauf gekommen, daß noch eine Schaltfläche gut wäre und zwar wieder zurück und alle anzeigen lassen.
Anzeige wie vor dem Ausführen des 1. Makros.
Kann ich zwar auch oben im Autofilter machen, aber bei vielen Daten, muß ich dann immer ganz hochfahren bis ich (Alle) habe.

Gruß Ottmar

Antwort 4 von Mondlicht

.... und sollte dann in der vorher aktiven Zelle stehen und nicht ganz oben in der Tabelle

Antwort 5 von coros

Hallo Ottmar,

danke Dir für die Bewertung.

Nachfolgend 2 Makros, die das machen sollten, was Du Dir vorgestellt hast. Das Makro "Auofilter_aktive_Zelle" ist fast wie das aus AW1, nur musst ich dort die Zeilennummer und die Spaltenindexzahl der aktivierten Zelle in 2 Variablen schreiben, da diese gesicherten Werte benötigt werden, um nachher wieder die Zelle, nach der gefiltert wurde, zu markieren, falls diese bereits abgewählt wurde.
Mit dem Makro "Autofilter_zurück" wird der Filter wieder auf die Einstellung "Alle" gestellt und die Zelle, nach der vorher gefiltert wurde, wird wieder aktiviert. Sollte hier aus irgend einem Grund ein Fehler auftreten, weil z.B. die Variable für die Spalteindexzahl den Wert 0 enthält, wird die Spalte, nach der gefiltert wurde über eine Schleife ermittelt und dann wieder auf Einstellung "Alle" gestellt. Es wird dann aber nicht die Zelle, nach der gefiltert wurde, aktiviert.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

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

Sub Auofilter_aktive_Zelle()
'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" & Range("C65536").End(xlUp).Row).AutoFilter Field:=iFilterColumn, _
Criteria1:=Cells(iFilterRow, iFilterColumn)
End Sub

Sub Autofilter_zurück()
Dim iFilterColumnPrüf As Filter
'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" & Range("C65536").End(xlUp).Row).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" & Range("C65536").End(xlUp).Row).AutoFilter Field:=iFilterColumn
        'Abfrage Ende
        End If
    'Nächsten Schleifendurchlauf starten
    Next
'Abfrage Ende
End If
End Sub
Die Makros sehen optisch sehr gewaltig aus. Das hängt damit zusammen, dass ich jede Zeile des Makros auskommentiert habe, damit Du sehen kannst, was in welcher Zeile erledigt wird.

Ich hoffe, Du kommst klar. Bei Fragen melde Dich. Ansonsten wünsche ich Dir ein schönes ruhiges Weihnachtsfest, welches ja jetzt nicht durch zu viel Arbeit geprägt ist, weil Du ja obige Makros hast. ;o)


MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 6 von Mondlicht

Hallo Oliver,

hätt nicht gedacht, dass es soviel Arbeit ist für dich und das am Hl.Abend.

Vielen herzlichen Dank!

Werde die Sache mal über die Feiertage austesten und dir dann nochmals berichten.

Ruhige Tage und Weihnachtsgrüsse nach Berlin!

Ottmar

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: