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

Forumthread: Auswahl mit Autofilter und verschieben

Auswahl mit Autofilter und verschieben
02.12.2008 15:05:00
Josef
Hallo!
Ich habe in einem Arbeitsblatt in der Spalte Q Zahlen von 11 bis 19 stehen.
mit dem Autofilter filtere ich jetzt zB. alle Datensätze mit der Zahl 12.
Ich möchte nun diese gefilterten Datensätze der Zahl 12 aus dem aktuellen Datenblatt entfernen und z.B. in der Tabelle2 an die nächste freie Stelle in der Spalte A einfügen.
wie würde hier bitte eine VBA Lösung lauten?
Danke
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Auswahl mit Autofilter und verschieben
03.12.2008 11:31:00
fcs
Hallo Josef,
etwa so
Gruß
Franz

Sub FilterKopierenLoeschen()
Dim wksFilter As Worksheet, objFilter As Filter
Dim wksZiel As Worksheet
Dim lngZeile As Long, bolAlle As Boolean
Dim varAuswahl, strVerzeichnisAktuell
On Error GoTo Fehler
varAuswahl = MsgBox("Gefilterte Daten nach Tabelle2 kopieren und löschen?", _
vbYesNo + vbQuestion, "Filter-Export")
If varAuswahl = vbYes Then
Set wksFilter = ActiveSheet 'Tabellenblatt mit Autofilter
Set wksZiel = Worksheets("Tabelle2")
'Zeile der Zieltabelle ab der Daten eingefügt werden sollen
With wksZiel
lngZeile = .Cells.SpecialCells(xlCellTypeLastCell).Row + 1
End With
With wksFilter
If .AutoFilterMode = True Then
'prüfen, ob ein Filter gesetzt ist
bolAlle = True
For Each objFilter In .AutoFilter.Filters
If objFilter.On = True Then
bolAlle = False
End If
Next
If bolAlle = True Then
If MsgBox("Es wurde kein Filter gesetzt, trotzdem Kopieren und Löschen?", _
vbYesNo) = vbNo Then
GoTo Fehler
End If
End If
'Daten Kopieren
.Range(.Rows(.AutoFilter.Range.Row + 1), .Rows(.AutoFilter.Range.Row _
+ .AutoFilter.Range.Rows.Count - 1)).Copy Destination:=wksZiel.Cells(lngZeile, 1)
Application.ScreenUpdating = False
'Kopierte (sichtbare) Zeilen löschen
For lngZeile = .AutoFilter.Range.Row + .AutoFilter.Range.Rows.Count - 1 _
To .AutoFilter.Range.Row + 1 Step -1
If .Rows(lngZeile).Hidden = False Then .Rows(lngZeile).Delete Shift:=xlShiftUp
Next
Application.ScreenUpdating = True
If bolAlle = False Then .ShowAllData
End If
End With
End If
Fehler:
With Err
If Err  0 Then
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End If
End With
Set wksZiel = Nothing: Set wksFilter = Nothing
End Sub


Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Autofilter in Excel: Gefilterte Auswahl verschieben und kopieren


Schritt-für-Schritt-Anleitung

Um gefilterte Datensätze aus einer Tabelle in Excel zu verschieben, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Autofilter aktivieren: Wähle die Daten in deinem Arbeitsblatt aus und aktiviere den Autofilter über Daten > Filter > Autofilter.

  2. Filter anwenden: Wende den Filter auf die gewünschte Spalte an, um z.B. nur die Daten mit der Zahl 12 anzuzeigen.

  3. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  4. Neues Modul einfügen: Gehe zu Einfügen > Modul, um ein neues Modul zu erstellen.

  5. VBA-Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Sub FilterKopierenLoeschen()
       Dim wksFilter As Worksheet, objFilter As Filter
       Dim wksZiel As Worksheet
       Dim lngZeile As Long, bolAlle As Boolean
       Dim varAuswahl, strVerzeichnisAktuell
       On Error GoTo Fehler
       varAuswahl = MsgBox("Gefilterte Daten nach Tabelle2 kopieren und löschen?", _
       vbYesNo + vbQuestion, "Filter-Export")
       If varAuswahl = vbYes Then
           Set wksFilter = ActiveSheet 'Tabellenblatt mit Autofilter
           Set wksZiel = Worksheets("Tabelle2")
           'Zeile der Zieltabelle ab der Daten eingefügt werden sollen
           With wksZiel
               lngZeile = .Cells.SpecialCells(xlCellTypeLastCell).Row + 1
           End With
           With wksFilter
               If .AutoFilterMode = True Then
                   'prüfen, ob ein Filter gesetzt ist
                   bolAlle = True
                   For Each objFilter In .AutoFilter.Filters
                       If objFilter.On = True Then
                           bolAlle = False
                       End If
                   Next
                   If bolAlle = True Then
                       If MsgBox("Es wurde kein Filter gesetzt, trotzdem Kopieren und Löschen?", _
                       vbYesNo) = vbNo Then
                           GoTo Fehler
                       End If
                   End If
                   'Daten Kopieren
                   .Range(.Rows(.AutoFilter.Range.Row + 1), .Rows(.AutoFilter.Range.Row _
                   + .AutoFilter.Range.Rows.Count - 1)).Copy Destination:=wksZiel.Cells(lngZeile, 1)
                   Application.ScreenUpdating = False
                   'Kopierte (sichtbare) Zeilen löschen
                   For lngZeile = .AutoFilter.Range.Row + .AutoFilter.Range.Rows.Count - 1 _
                   To .AutoFilter.Range.Row + 1 Step -1
                       If .Rows(lngZeile).Hidden = False Then .Rows(lngZeile).Delete Shift:=xlShiftUp
                   Next
                   Application.ScreenUpdating = True
                   If bolAlle = False Then .ShowAllData
               End If
           End With
       End If
    Fehler:
       With Err
           If Err <> 0 Then
               MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
           End If
       End With
       Set wksZiel = Nothing: Set wksFilter = Nothing
    End Sub
  6. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Zellen in einem gefilterten Bereich können nicht verschoben werden: Stelle sicher, dass du das richtige Makro benutzt, um die gefilterten Daten zu kopieren und zu löschen. Wenn du versuchst, die Zellen manuell zu verschieben, während der Autofilter aktiv ist, wird dies nicht funktionieren.

  • Kein Filter gesetzt: Wenn du versuchst, gefilterte Daten zu kopieren, aber kein Filter aktiv ist, wird eine Warnmeldung angezeigt. Du kannst das Makro so anpassen, dass es auch ohne Filter arbeitet, wenn gewünscht.


Alternative Methoden

Eine Alternative zum VBA-Skript ist die Verwendung von Excel-Formeln und Funktionen, um die gefilterten Daten manuell zu kopieren:

  1. Filtere die Daten wie gewohnt.
  2. Markiere die sichtbaren Zellen.
  3. Kopiere die Daten (Strg + C).
  4. Wechsle zu Tabelle2 und füge die Daten an der gewünschten Stelle ein (Strg + V).
  5. Lösche die gefilterten Daten im ursprünglichen Arbeitsblatt manuell.

Praktische Beispiele

  1. Beispiel für das Kopieren gefilterter Daten: Angenommen, du hast eine Liste von Verkaufszahlen in Spalte Q und möchtest alle Verkäufe über 1000 Euro in Tabelle2 übertragen. Setze den Autofilter, wähle die entsprechende Zahl und führe das oben genannte Makro aus.

  2. Beispiel für mehrfaches Filtern: Du kannst auch mehrere Kriterien mit dem Autofilter anwenden, um beispielsweise alle Verkäufe in einem bestimmten Bereich zu filtern. Kombiniere die Filter, um die gewünschten Daten zu erhalten.


Tipps für Profis

  • Nutze die Möglichkeit, die aktuelle Auswahl dem Filter hinzuzufügen, um die Suche zu verfeinern.
  • Experimentiere mit bedingten Formatierungen, um bestimmte Datensätze hervorzuheben, bevor du sie verschiebst.
  • Verwende die SVERWEIS-Funktion, um Daten aus gefilterten Ergebnissen in eine andere Tabelle zu übertragen.

FAQ: Häufige Fragen

1. Kann ich mehrere Filter gleichzeitig anwenden?
Ja, du kannst den Autofilter verwenden, um mehrere Kriterien gleichzeitig zu filtern, z.B. nach mehreren Zahlen in der gleichen Spalte.

2. Was passiert, wenn ich versehentlich den Autofilter deaktiviere?
Wenn der Autofilter deaktiviert ist, werden alle Daten angezeigt. Stelle sicher, dass du den Filter erneut aktivierst, bevor du das Makro ausführst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige