Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Autofilter / Zellen ansprechen

Forumthread: Autofilter / Zellen ansprechen

Autofilter / Zellen ansprechen
Alex
Hallo Forum,
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.
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Archivsuche benutzen , oder googeln,
13.04.2012 11:49:22
Matthias
Hallo Alex,
...würde uns viel Arbeit ersparen.
Deine Angabe VBA gut ist wohl auch nicht passend gewählt, sonst würdest du das hinbekommen.
du musst erst mal den Bereich bestimmen / auslesen der gefiltert wurde, somit alle versteckten Zeilen
ausgrenzen, um dann diesen Bereich zu kopieren oder was auch immer du damit vorhast.
Gruß Matthias
Anzeige
mach was mit Cells.SpecialCells(xlCellTypeVisible)
13.04.2012 12:04:45
ransi
Hallo Alex
Hilft dir das weiter ?
Sheets("Tabelle1").Range("A1").CurrentRegion.Cells.SpecialCells(xlCellTypeVisible).Select

ransi
Anzeige
Auswahl finden und selectieren
13.04.2012 12:07:12
Matthias
Oder sowas, :
gefunden im Archiv
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ß Matthias
Anzeige
AW: Auswahl finden und selectieren
13.04.2012 12:08:59
Matthias
und noch ne Komplettlösung kürzer
auch aus dem Archiv
Sub 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

Anzeige
AW: Autofilter / Zellen ansprechen
13.04.2012 12:22:51
Alex
Hallo,
Ich habe mich zu undeutlich ausgedrückt bzw. das Problem ungenau beschrieben.
Ich habe eine Excelliste in der in einer Spalte Hyperlinks hinterlegt sind mit denen ich verlinkte Dokumente öffnen kann.
Mein Ziel ist es die verlinkten Dokumente durch ein Makro in einem Verzeichniss zu speichern.
Diese Aufgabe funtioniertschon (ich gehe per Schleife durch die gesame Exceltabelle (Zeile 1 bis x) und speichere die Dokumente.
Das nächste Ziel wäre lediglich die durch den Filter ausgewählten Dokumente zu speichern.
Ich habe aber noch keine Weg gefunden die gefilterten Zeilen anzusprechen.
Die Kopiemethode wäre natürlich eine Lösung aber nicht sehr elegant.
Gibt es sonst noch Möglichkeiten?
Grüße aus Erlangen
Alex
Anzeige
AW: einfache Lösung
13.04.2012 12:47:07
Alex
Hallo,
Mit der Funktion
If Rows(zeile).Hidden = False Then ....
kann ich sehr einfach die nicht relevanten Einträge "ignorieren".
;
Anzeige
Anzeige

Infobox / Tutorial

Autofilter und Zellen ansprechen in Excel


Schritt-für-Schritt-Anleitung

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:

  1. Visual Basic Editor öffnen:

    • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Neues Modul einfügen:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle Einfügen > Modul.
  3. VBA-Code einfügen:

    • Kopiere den folgenden Code in das Modul:
    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
  4. Makro ausführen:

    • Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle selectFilter aus und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • 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.


Alternative Methoden

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.


Praktische Beispiele

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

Tipps für Profis

  • Vermeide unnötige Schleifen: Nutze die SpecialCells-Methode, um die Leistung zu steigern und den Code zu vereinfachen.
  • Verwende Fehlerbehandlung: Integriere 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

FAQ: Häufige Fragen

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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige