gefilterte Einträge automatisiert auswählen und rauskopieren

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    gefilterte Einträge automatisiert auswählen und rauskopieren

    Liebe Community


    Ich möchte gerne ein VBA schreiben, welches Tabellen der folgenden Art, bearbeitet:


    ID-Nummer:
    In-Betriebnahme - Datum:
    Außer-Betriebnahme - Datum:
    1007631
    01.01.1994
    22.09.2006
    1007632
    01.01.1994
    22.09.2006
    1007633
    01.01.1994
    18.04.2012
    1014628
    29.11.1995
    02.10.2009
    1014766
    29.11.1995
    02.10.2009
    1015254
    29.11.1995
    02.10.2009
    1015416
    04.06.1997
    13.06.2007
    1015417
    04.06.1997
    31.01.2008
    1015418
    04.06.1997
    04.03.2010


    Zur Erklärung:
    Die ID-Nummern sind eindeutige Identifikationsnummern, die Geräten zugeordnet werden. Das Inbetriebnahme-Datum stellt das Datum dar, an dem ein Gerät in Betrieb genommen wurde, und das Außerbetriebnahme-Datum, das, an dem es aus dem Umlauf gebracht wurde. Ich möchte nun eine Auflistung aller Geräte haben, welche zwischen 2005 und 2015 im Umlauf waren und das auf die Jahre hin aufgelistet. Somit, die Ergebnis-Tabelle, sollte in etwa so aussehen...:

    2005:
    2006:
    2007:
    1007631
    1007633
    1007633
    1007632
    1014628
    1014628
    1007633
    1014766
    1014766
    1014628
    1015254
    1015254
    1014766
    1015416
    1015417
    1015254
    1015417
    1015418
    1015416
    1015418

    1015417


    1015418




    Ich weiß leider nicht so recht wie ich das umsetzen könnte... Ich habe mal eine Grundidee gehabt... Dazu wäre mein Code der folgende...:

    Visual Basic-Quellcode

    1. Dim a As Long
    2. a = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
    3. ' Geräte die vor 2005 in Betrieb genommen wurden und erst nach 2005 deaktiviert wurden:
    4. Tabelle1.Range(Cells(2, 1), Cells(a, 5)).AutoFilter Field:=2, Criteria1:= _
    5. "<01.01.2005", Operator:=xlAnd
    6. Tabelle1.Range(Cells(2, 1), Cells(a, 5)).AutoFilter Field:=3, Criteria1:= _
    7. ">31.12.2005", Operator:=xlAnd
    8. 'erneuter Rowcount von ID-Spalte um gefilterte Ergebnisse auswählen zu können...??
    9. 'kopiere/füge ein... ersten bis letzten Eintrag der gefilterten Ergebnisse in Spalte K....??
    10. ' Geräte die im Jahr 2005 in Betrieb genommen wurden und aber vor Ende 2005 wieder deaktiviert wurden:
    11. ' Schriftfarbe rot:
    12. Tabelle1.Range(Cells(2, 1), Cells(a, 5)).AutoFilter Field:=2, Criteria1:= _
    13. ">=01.01.2005", Operator:=xlAnd
    14. Tabelle1.Range(Cells(2, 1), Cells(a, 5)).AutoFilter Field:=3, Criteria1:= _
    15. "<=31.12.2005", Operator:=xlAnd
    16. ' wieder erneuter Rowcount den gefilterten Ergebnissen...
    17. ' kopiere wieder die gefilterten Einträge, aber starte mit dem Einfügen in der ersten freien Zelle, von Spalte K...??
    18. ' usw...



    Ich weiß allerdings nicht wie ich generell nur, die als Ergebnis, gefilterten Einträge, mittels automatischer Start/End-Position, ermitteln kann. - Also, wenn man eine gefilterte Tabelle hat, dass man dann nur diese gefilterten Einträge markieren, bzw. , kopieren kann....

    Und zum Zweiten müsste ich dann auch noch das so kopieren, dass Excel, in der darauffolgenden Zeile, dort fortsetzt, wo es letztens war, beim Kopieren und Einfügen in der Spalte K.


    Kann mir jemand dabei helfen?


    Vielen Dank!

    VG Tim
    hi dani!

    danke für deine antwort!
    hmm... ja... klingt nit so schlecht der Ansatz...

    aber kannst du mir sagen, wie das geht, dass die for-Schleife nur die gefilterten Einträge durchläuft??

    also... wie muss ich das im VBA schreiben, dass der nur die Einträge durchläuft...? weil.. ich kenn nur rowcount... mit dem hast du aber immer die ganzen Einträge einer Spalte, aber ich weiß jz leider nicht wie ich einen "rowcount" nur für gefilterte, angezeigte Werte machen kann...??

    Weißt du da was?


    Hat irgendwer eine Idee bzw. kann mir sagen, wie der Code dazu aussieht?

    VG Tim

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ereza“ ()

    Servus,

    ich würde die Einträge davor Filtern und die jeweils gefilterte Spalte durchlaufen lassen und dort wo die Bedingung auftritt,
    den Wert rausschreiben lassen in die jeweilige Zelle.

    Das durchlaufen war auch im vorherigen Thread mein Problem und diese Scheife die durchzählt hat mir weit geholfen.

    Quellcode

    1. Dim lastRow as Long
    2. For lastrow = Cells(Rows.Count, "A").End(xlUp).Row to 1 step -1
    3. ' hier kann man nun in andere subs springen und befehlsabläufe abarbeiten
    4. Next
    hallo!

    nun ja... aber würde der jetzt nicht trotzdem alle (gefilterte und ungefilterte Zeilen) durchlaufen?? - weil... der RowCount zählt ja alles dann oder? muss man da nicht irgendwie davor deklarieren, dass nur praktisch "sichtbare" bzw. durch den Filter "eingeblendete" Zellen gezählt werden sollen??

    weißt du da was?
    Gefilterte Zellen sind "Visible", die anderen nicht.
    Du kannst diese Eigenschaft direkt abfragen oder in eine Funktion packen.

    Visual Basic-Quellcode

    1. Function IsInFilter(ByVal Cell As Range) As Boolean
    2. IsInFilter = Cell.EntireRow.Visible
    3. End Function

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --