Gruss Peter
Option Explicit
Sub AutofilterErgebnisKopieren()
Dim letzteZ As Long
Dim WksQ As Worksheet
Dim WksZ As Worksheet
Set WksQ = Worksheets("Quelle")
Set WksZ = Worksheets("Gefiltert")
'Bereich beginnt unterhalb der Filterzeile OffSet(1)
WksQ.AutoFilter.Range.Offset(1).Resize(WksQ.AutoFilter.Range.Rows.Count - 1).SpecialCells( _
xlCellTypeVisible).copy
With WksZ
.Rows("11:3000").Delete 'gefilterte Zeilen anpassen Maxwert
.Cells(11, 2).PasteSpecial Paste:=xlFormulas 'einfügen ab Zeile 11,Spalte2 (B11)
End With
Application.CutCopyMode = False 'Copymodus beenden
WksQ.Activate
End Sub
Gruß Matze
Option Explicit
Sub AutofilterErgebnisKopieren() 'MUSS vom QUELLBLATT ausgeführt werden!!!!!!
ActiveSheet.AutoFilter.Range.Offset(1). _
Resize(ActiveSheet.AutoFilter.Range.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).copy
With Worksheets("Gefiltert")
.Rows("11:3000").Delete
.Cells(11, 2).PasteSpecial Paste:=xlFormulas
End With
Application.CutCopyMode = False
Sheets("Quelle").Activate
End Sub
Matze
Die Datei https://www.herber.de/bbs/user/89252.xlsm wurde aus Datenschutzgründen gelöscht
Um gefilterte Zeilen in Excel per Makro zu kopieren, kannst Du das folgende VBA-Skript verwenden. Achte darauf, dass Du die Namen der Arbeitsblätter entsprechend anpasst.
Öffne den VBA-Editor:
ALT + F11, um den Editor zu öffnen.Ein neues Modul erstellen:
Einfügen > Modul.Füge den folgenden Code ein:
Option Explicit
Sub AutofilterErgebnisKopieren()
Dim letzteZ As Long
Dim WksQ As Worksheet
Dim WksZ As Worksheet
Set WksQ = Worksheets("Blatt1") ' Quelltabelle
Set WksZ = Worksheets("Blatt2") ' Zieltabelle
' Bereich beginnt unterhalb der Filterzeile
WksQ.AutoFilter.Range.Offset(1).Resize(WksQ.AutoFilter.Range.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy
With WksZ
.Rows("10:3000").Delete ' Zielbereich löschen
.Cells(10, 2).PasteSpecial Paste:=xlFormulas ' Einfügen ab Zeile 10, Spalte 2 (B10)
End With
Application.CutCopyMode = False ' Copymodus beenden
WksQ.Activate
End Sub
Makro ausführen:
ALT + F8, wähle das Makro AutofilterErgebnisKopieren und klicke auf Ausführen.Laufzeitfehler 91: Dieser Fehler tritt auf, wenn ein Objekt nicht ordnungsgemäß festgelegt wurde. Stelle sicher, dass die Namen der Arbeitsblätter ("Blatt1" und "Blatt2") korrekt sind.
Problem mit Sichtbarkeit der Zeilen: Wenn die gefilterten Zeilen nicht korrekt kopiert werden, stelle sicher, dass das Makro vom aktiven Blatt ausgeführt wird.
Eine alternative Methode besteht darin, die Methode UsedRange zu verwenden, um die letzte Zeile dynamisch zu ermitteln:
letzteZ = WksQ.Cells(WksQ.Rows.Count, "B").End(xlUp).Row
Diese Methode ermöglicht es Dir, den Bereich der Quelltabelle anzupassen, ohne die Zeilen manuell anzugeben.
Wenn Du eine Excel-Datei mit Daten hast, in der gefilterte Zeilen kopiert werden sollen, kannst Du das Makro wie folgt anpassen:
WksQ.AutoFilter.Range.Offset(2).Resize(WksQ.AutoFilter.Range.Rows.Count - 2).SpecialCells(xlCellTypeVisible).Copy
Hier wird ab der Zeile 9 kopiert.
Vermeide die Verwendung von .Select:
Verwende stattdessen direkt das Objekt, um die Effizienz zu erhöhen, wie im Beispiel gezeigt.
Fehlerbehandlung:
Implementiere On Error Resume Next, um Laufzeitfehler zu vermeiden und eine benutzerfreundliche Erfahrung zu gewährleisten.
1. Kann ich das Makro anpassen, um andere Spalten zu kopieren? Ja, ändere einfach den Zellbereich im Code, um die gewünschten Spalten zu kopieren.
2. Wie kann ich das Makro automatisieren? Du kannst das Makro an einen Button oder ein Ereignis wie einen Doppelklick auf eine Zelle binden.
3. Funktioniert dies in Excel 365? Ja, das Makro sollte in Excel 365 sowie in anderen Versionen von Excel, die VBA unterstützen, funktionieren.