Microsoft Excel

Herbers Excel/VBA-Archiv

Autofilter bei Liste

Betrifft: Autofilter bei Liste von: Sven
Geschrieben am: 27.10.2020 10:25:16

Hallo zusammen,
mit dieser Zeile filtere ich eine Liste auf nicht-leere Einträge in der Spalte 1. Das klappt prima. Aber die Breite der Tabelle kann sich ändern und geht nicht immer wie hier nur bis P. Wie kann ich das so abwandeln, dass auch beritere Listen dynamisch gefiltert werden? Das Kriterium ist immer in A.

.Range("$A$1:$P$" & .Cells(.Rows.Count, "A").End(xlUp).Row).AutoFilter Field:=1, Criteria1:="<>"
Danke und Grüße
Sven

Betrifft: AW: Autofilter bei Liste
von: Nepumuk
Geschrieben am: 27.10.2020 10:35:56

Hallo Sven,

einfach so:
.Rows(1).AutoFilter Field:=1, Criteria1:="<>"

Den Rest erkennt Excel automatisch.

Gruß
Nepumuk

Betrifft: AW: Autofilter bei Liste
von: Sven
Geschrieben am: 27.10.2020 10:42:52

Hallo Nepumuk,
danke!
Aber dann bekomme ich "Die Autofilter-Methode des Range-Objektes konnte nicht ausgeführt werden".
With ThisWorkbook.Worksheets(t1)
  .Rows(1).AutoFilter Field:=1, Criteria1:="<>"
  .AutoFilter.Range.Copy
End With


Betrifft: AW: Autofilter bei Liste
von: Nepumuk
Geschrieben am: 27.10.2020 10:46:00

Hallo Sven,

ist die Zeile 1 leer? Lade mal eine Mustermappe hoch in welcher der Fehler auftaucht.

Gruß
Nepumuk

Betrifft: AW: Autofilter bei Liste
von: Sven
Geschrieben am: 27.10.2020 11:03:24

Danke!
Hier gehts zur Datei:
https://www.herber.de/bbs/user/141120.xlsm

Betrifft: AW: Autofilter bei Liste
von: Nepumuk
Geschrieben am: 27.10.2020 11:11:41

Hallo Sven,

das ist ein ListObject, da funktioniert das so:

Public Sub importSelection()
    With ThisWorkbook.Worksheets("DWH").ListObjects("Abfrage_FR")
        .Range.AutoFilter Field:=1, Criteria1:="<>"
        .AutoFilter.Range.Copy
    End With
End Sub

Gruß
Nepumuk

Betrifft: AW: Autofilter bei Liste
von: Sven
Geschrieben am: 27.10.2020 11:27:58

Oh, toll. Danke.
Bonusfrage: Ich möchte nicht Spalte A und nicht die erste Überschriftspalte kopieren.
Wenn ich das so mache, ist jedoch unten eine leere Zeile zu viel dabei:
.ListObjects("Abfrage_FR").AutoFilter.Range.Offset(1, 1).Copy


Betrifft: AW: Autofilter bei Liste
von: Nepumuk
Geschrieben am: 27.10.2020 11:38:28

Hallo Sven,

teste mal:

Public Sub importSelection()
    With ThisWorkbook.Worksheets("DWH").ListObjects("Abfrage_FR")
        .Range.AutoFilter Field:=1, Criteria1:="<>"
        With .DataBodyRange
            .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1).Copy
        End With
    End With
End Sub

Gruß
Nepumuk

Betrifft: AW: Autofilter bei Liste
von: Sven
Geschrieben am: 27.10.2020 11:59:20

Super. Klappt. Jetzt sind wir so weit, da kannst DU mir auch beim Einfügen helfen. :)
Und zwar mache ich das bisher so:
ThisWorkbook.Worksheets(strStand).Cells(2, "A").PasteSpecial Paste:=xlPasteValues

Der Inhalt landet also in A2 folgende. Aber: auf dem Ziel-Tabellenblatt sind in den hinteren Spalten bereits Werte, die ich erhalten möchte.
Beispiel: Ich kopiere vier Spalten, füge sie in A bis D ein und in Spalte E steht bereits etwas, was bleiben soll.
Kann man das hinbekommen?

Betrifft: AW: Autofilter bei Liste
von: Nepumuk
Geschrieben am: 27.10.2020 12:30:50

Hallo Sven,

versteh ich nicht. Die Spalte E bleibt doch erhalten wenn du nur 4 Spalten einfügst.

Gruß
Nepumuk

Betrifft: AW: Autofilter bei Liste
von: Sven
Geschrieben am: 27.10.2020 13:19:22

Ja, bin doof. Hast recht. Danke!

Betrifft: ... und ich brech mir hier einen ab....
von: MCO
Geschrieben am: 27.10.2020 10:43:47

... nur der Vollständigkeit halber, oder besser: zu allem Überfluss.

  Dim sp As Single
    Dim z As Single
    Dim rng As Range

    With ActiveSheet
        sp = .Cells(1, .Columns.Count).End(xlToLeft).Column
        z = .Cells(.Rows.Count, "A").End(xlUp).Row
        Set rng = .Range("$A$1:" & Cells(z, sp).Address)
        rng.AutoFilter Field:=1, Criteria1:="<>"
    End With
Gruß, MCO

Betrifft: AW: ... und ich brech mir hier einen ab....
von: Sven
Geschrieben am: 27.10.2020 11:41:45

Trotzdem, danke!

Beiträge aus dem Excel-Forum zum Thema "Autofilter bei Liste"