Habe eine lange Exceltabelle mit Autofilter. Wie kann ich die "angezeigten" Zellen/Zeilen per VBA auswählen wenn ein Filter aktiv ist ?
Danke im Vorraus.
Sub selectFilter()
Dim rg1 As Range, rg2 As Range, rg3 As Range, rg4 As Range
'alle sichtbaren Zellen im Filterbereich
'leider gehören dazu auch die Spaltenüberschriften
Set rg1 = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
'Überschriftenzeile ermitteln
Set rg2 = rg1.Rows(1)
'alle Spaltenüberschriften rausselektieren
For Each rg3 In rg1
If Application.Intersect(rg3, rg2) Is Nothing Then
'alle Zellen zu einem neuen Bereich (rg4) zusammenfassen, _
die sich nicht in der Überschriftenzeile befinden
If rg4 Is Nothing Then
Set rg4 = rg3
Else
Set rg4 = Union(rg4, rg3)
End If
End If
Next rg3
''gefilterte Zellen selektieren
''rg4.Select
rg4.copy
'alle Objektvariablen deaktivieren
Set rg1 = Nothing
Set rg2 = Nothing
Set rg3 = Nothing
Set rg4 = Nothing
End Sub
Gruß MatthiasSub AutofilterErgebnisKopieren()
'Kopiert den sichtbaren Teile einer per Autofilter gefilterten Tabelle
'ohne Überschriften in ein anderes Tabellenblatt
ActiveSheet.AutoFilter.Range.Offset(1). _
Resize(ActiveSheet.AutoFilter.Range.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).Copy _
Sheets(3).Cells(Sheets(3).Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)'anpassen (3)
End Sub
Um die "angezeigten" Zellen oder Zeilen in einer Excel-Tabelle mit einem aktiven Autofilter auszuwählen, kannst du VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:
Visual Basic Editor öffnen:
ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.Neues Modul einfügen:
Einfügen > Modul.VBA-Code einfügen:
Sub selectFilter()
Dim rg1 As Range, rg2 As Range, rg3 As Range, rg4 As Range
' Alle sichtbaren Zellen im Filterbereich
Set rg1 = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
' Überschriftenzeile ermitteln
Set rg2 = rg1.Rows(1)
For Each rg3 In rg1
If Application.Intersect(rg3, rg2) Is Nothing Then
If rg4 Is Nothing Then
Set rg4 = rg3
Else
Set rg4 = Union(rg4, rg3)
End If
End If
Next rg3
' Gefilterte Zellen selektieren
rg4.Copy
End Sub
Makro ausführen:
ALT + F8, wähle selectFilter aus und klicke auf Ausführen.Fehler: Laufzeitfehler 1004
Dieser Fehler tritt auf, wenn keine sichtbaren Zellen vorhanden sind. Stelle sicher, dass der Autofilter aktiv ist und mindestens eine Zeile angezeigt wird.
Problem mit Überschriften
Wenn du die Überschriften in der Auswahl haben möchtest, passe den Code an, indem du die Zeile If Application.Intersect(rg3, rg2) Is Nothing Then entfernst.
Eine alternative Methode besteht darin, die Funktion Cells.SpecialCells(xlCellTypeVisible) zu verwenden. Hier ist ein Beispiel:
Sheets("Tabelle1").Range("A1").CurrentRegion.Cells.SpecialCells(xlCellTypeVisible).Select
Dieser Code wählt alle sichtbaren Zellen im definierten Bereich aus.
Beispiel 1: Kopieren der gefilterten Daten in ein anderes Blatt
Hier ist eine kompakte Lösung, die die sichtbaren Teile einer gefilterten Tabelle ohne Überschriften in ein anderes Tabellenblatt kopiert:
Sub AutofilterErgebnisKopieren()
ActiveSheet.AutoFilter.Range.Offset(1). _
Resize(ActiveSheet.AutoFilter.Range.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).Copy _
Sheets(3).Cells(Sheets(3).Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
End Sub
SpecialCells-Methode, um die Leistung zu steigern und den Code zu vereinfachen.On Error Resume Next, um Laufzeitfehler elegant zu handhaben.Optimierung: Deaktiviere Bildschirmaktualisierungen während der Ausführung deines Makros, um die Geschwindigkeit zu verbessern:
Application.ScreenUpdating = False
' Dein Code hier
Application.ScreenUpdating = True
1. Wie kann ich nur die sichtbaren Zellen speichern?
Du kannst die Methode SpecialCells(xlCellTypeVisible) verwenden, um nur die sichtbaren Zellen auszuwählen und zu speichern.
2. Was mache ich, wenn mein Makro nicht funktioniert?
Überprüfe, ob der Autofilter aktiv ist und ob es sichtbare Zellen gibt. Debugge deinen Code Schritt für Schritt, um den Fehler zu finden.