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

Forumthread: Gefilterte Datensätze ausschneiden und einfügen

Gefilterte Datensätze ausschneiden und einfügen
24.06.2019 12:18:56
Georg
Liebe Mitglieder, ich habe mal den MakroRecorder mitlaufen lassen wegen einer Filterung.
Die Datei ist sehr groß, daher über VBA.
Meine Frage:
Die Daten stehen in im Bereich "A:T" mit mehreren 1000 Datensätze, diese sollen dann gefiltert werden. (siehe Code)
Wie kann ich nach der Sortierung die gefilterten Datensätze aussschneiden und z. B. in das Blatt "Fehlzeiten" einfügen? Vielen Dank!!!
Sub Sort
dim TB2 as integer
Set TB2 = Sheets("Daten") 'die SQL Daten aus EQlab
Dim TB3 as integer
Set TB3 = Sheets("Fehlzeiten")
With TB2
.ListObjects("Daten").Range.AutoFilter Field:=20, Criteria1:= _
"=Samstag", Operator:=xlOr, Criteria2:="=Sonntag"
.ListObjects("Daten").Range.AutoFilter Field:=18, Criteria1:= _
"=21:00:00", Operator:=xlAnd
End With
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gefilterte Datensätze ausschneiden und einfügen
24.06.2019 13:40:08
Rob
Hi Georg,
das lässt sich mit ADODB und einer SQL-Anweisung bewerkstelligen. Der SQL-Befehlt könnte wie folgt aussehen:
SELECT * From (NameDesArbeitsblattes$) WHERE (Tag = 'Samstag' AND Tag = 'Sonntag') AND (Uhrzeit BETWEEN '09:00:00' and '21:00:00')
Grüße, Rob
AW: Gefilterte Datensätze ausschneiden und einfügen
25.06.2019 04:30:31
Werner
Hallo Georg,
so:
Sub Sort()
Dim TB2 As Worksheet, TB3 As Worksheet
Set TB2 = Worksheets("Daten")
Set TB3 = Worksheets("Fehlzeiten")
With TB2.ListObjects("Daten")
.Range.AutoFilter Field:=20, Criteria1:= _
"=Samstag", Operator:=xlOr, Criteria2:="=Sonntag"
.Range.AutoFilter Field:=18, Criteria1:= _
"=21:00:00", Operator:=xlAnd
With .AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy
TB3.Range("A1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Application.DisplayAlerts = False
.Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete
End With
.AutoFilter.ShowAllData
End With
Set TB2 = Nothing: Set TB3 = Nothing
End Sub
Gruß Werner
Anzeige
Fehlerbehandlung vergessen, falls....
25.06.2019 05:14:53
Werner
Hallo Georg,
...der Filter mal kein Ergebnis liefert:
Sub Sort()
Dim TB2 As Worksheet, TB3 As Worksheet
Set TB2 = Worksheets("Daten")
Set TB3 = Worksheets("Fehlzeiten")
Application.ScreenUpdating = False
With TB2.ListObjects("Daten")
.Range.AutoFilter Field:=20, Criteria1:= _
"=Samstag", Operator:=xlOr, Criteria2:="=Sonntag"
.Range.AutoFilter Field:=18, Criteria1:= _
"=21:00:00", Operator:=xlAnd
With .AutoFilter.Range
If .Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
.Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy
TB3.Range("A1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Application.DisplayAlerts = False
.Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete
Else
MsgBox "Filter liefert kein Ergebnis." & vbLf & "Es wurde nichts kopiert."
End If
End With
.AutoFilter.ShowAllData
End With
Set TB2 = Nothing: Set TB3 = Nothing
End Sub
Gruß Werner
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Gefilterte Datensätze ausschneiden und einfügen


Schritt-für-Schritt-Anleitung

Um gefilterte Zeilen in Excel auszuschneiden und in eine andere Tabelle einzufügen, kannst du den folgenden VBA-Code verwenden. Dieser Code filtert die Daten und kopiert die sichtbaren Zeilen in das Blatt "Fehlzeiten".

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul ein (Einfügen > Modul).
  3. Kopiere den folgenden VBA-Code in das Modul:
Sub Sort()
    Dim TB2 As Worksheet, TB3 As Worksheet
    Set TB2 = Worksheets("Daten")
    Set TB3 = Worksheets("Fehlzeiten")

    Application.ScreenUpdating = False

    With TB2.ListObjects("Daten")
        .Range.AutoFilter Field:=20, Criteria1:="=Samstag", Operator:=xlOr, Criteria2:="=Sonntag"
        .Range.AutoFilter Field:=18, Criteria1:="=21:00:00", Operator:=xlAnd

        With .AutoFilter.Range
            If .Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
                .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy
                TB3.Range("A1").PasteSpecial Paste:=xlPasteValues
                Application.CutCopyMode = False
                Application.DisplayAlerts = False
                .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete
            Else
                MsgBox "Filter liefert kein Ergebnis." & vbLf & "Es wurde nichts kopiert."
            End If
        End With

        .AutoFilter.ShowAllData
    End With

    Set TB2 = Nothing
    Set TB3 = Nothing
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus (ALT + F8, dann das Makro auswählen und auf Ausführen klicken).

Häufige Fehler und Lösungen

  • Fehler: Der Filter liefert kein Ergebnis.

    • Lösung: Überprüfe die Filterkriterien. Stelle sicher, dass die Daten im Bereich "Daten" die gewünschten Kriterien erfüllen.
  • Fehler: Der Code funktioniert nicht.

    • Lösung: Stelle sicher, dass die Tabellennamen ("Daten" und "Fehlzeiten") korrekt sind und dass die Tabelle in Excel als "ListObject" formatiert ist.

Alternative Methoden

Falls du keine VBA-Lösungen verwenden möchtest, kannst du gefilterte Zeilen auch manuell ausschneiden und in eine andere Tabelle einfügen:

  1. Filtere die gewünschten Daten in deiner Tabelle.
  2. Wähle die sichtbaren Zeilen aus.
  3. Drücke Strg + C, um die Daten zu kopieren.
  4. Wechsle zum Zielblatt ("Fehlzeiten") und drücke Strg + V, um die Daten einzufügen.
  5. Um die Originaldaten zu löschen, gehe zurück zur ursprünglichen Tabelle, wähle die gefilterten Zeilen aus und drücke die Entf-Taste.

Praktische Beispiele

  • Beispiel 1: Du hast eine Tabelle mit Arbeitszeiten und möchtest nur die Zeilen für "Samstag" und "Sonntag" ausschneiden und in eine separate Tabelle einfügen. Verwende den obigen VBA-Code, um dies effizient zu tun.

  • Beispiel 2: Du möchtest die Werte aus einer gefilterten Tabelle einfügen. Verwende die Funktion PasteSpecial, um nur die Werte ohne Formatierungen zu übertragen.


Tipps für Profis

  • Nutze die Application.ScreenUpdating = False, um die Bildschirmaktualisierung während der Ausführung des Codes zu deaktivieren. Dies kann die Ausführungsgeschwindigkeit erhöhen.
  • Setze die Filterkriterien dynamisch, indem du Variablen verwendest, um die Flexibilität des Makros zu erhöhen.
  • Speichere deine Arbeit regelmäßig, insbesondere wenn du mit VBA arbeitest, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich nur gefilterte Zeilen ausschneiden?
Du kannst den VBA-Code verwenden, um nur die Sichtbaren Zeilen zu kopieren und sie dann an einer anderen Stelle einzufügen.

2. Kann ich Daten in eine gefilterte Tabelle einfügen?
Ja, du kannst die PasteSpecial-Funktion verwenden, um die Werte in eine gefilterte Tabelle einzufügen, während du sicherstellst, dass die Formatierungen nicht übernommen werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige