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

AdvancedFilter in VBA

Forumthread: AdvancedFilter in VBA

AdvancedFilter in VBA
08.08.2018 10:10:22
Mia
Hallo zusammen,
ich lese mich seit 2 Tagen durch das Internet und bekomme es noch nicht hin mit dem AdvancedFilter. Vielleicht kann mir hier jemand helfen.
Mein Problem:
Ich habe etwa 20 Listen mit jeweils etwa 10.000 Zeilen und benötige davon jeweils etwa 10 Einträge, das sind jedesmal die gleichen. Für den Anfang versuche ich aus einer Liste die 10 benötigten Zeilen auszulesen. Wenn das klappt, kann ich es ausweiten auf alle.
In meiner Datei "Test" habe ich drei Tabellenblätter: "Suchwerte", "Daten" und "Ergebnisse".
Suchwerte enthält genau die Liste mit den 10 gesuchten Variablennamen (A1:A10)
Daten enthält die große Tabelle mit 6 Spalten und 10.000 Zeilen. In Spalte D stehen die Variablennamen und in Spalte F die Werte dazu. Den Rest brauche ich nicht, falls es daran scheitert kann ich die überzähligen Spalten löschen.
In Ergebnisse sollen dann die 10 Variablen und daneben die zugehörigen 10 Werte stehen.
Wenn das nur erstmal funktioniert, will ich es verfeinern, mit benannten Bereichen anstatt fixer Zellbezeichnungen.
Das hab ich probiert:

Sub Daten_suchen()
Sheets("Daten").Range("D1:F10000").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Suchwerte").Range("A1:A10"), _
CopyToRange:=Sheets("Ergebnis").Range("A1:C10"), _
Unique:=False
End Sub

Ergebnis ist, dass in meinem Blatt "Ergebnis" nur in A1:C1 die Spaltenüberschriften aus "Daten" stehen.
Was mache ich falsch? Wie mache ich es richtig?
Vielen Dank schon mal für eure Hilfe,
Mia.
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Name? Beispiel?
08.08.2018 10:54:29
Fennek
Hallo Mia,
aus dem Gedächtnis: Die Spalte der Kriterien muss den Variablen-Namen beinhalten.
Du verstehts, dass ich kein Beispiel selbst zusammenbasteln möchte, könntest du eine möglichst kleine Beispieldatei hochladen?
mfg
AW: Name? Beispiel?
08.08.2018 13:38:05
Mia
Hier ein Beispiel - ich hoffe das funktioniert mit dem Upload.
https://www.herber.de/bbs/user/123205.xlsm
Anzeige
AW: Spaltenkopf
08.08.2018 14:01:31
Fennek
Hallo,
wenn im Blatt "Suchwerte" in A1 der Spaltenkopf, ab A2 die Suchwerte stehen, wird es klappen.
Im Code sind die Ranges fest eingetragen, dies sollte noch flexibler gemacht werden:
Anstell
.Range("D1:F29")
dann
.Cells(1,1).currentregion
oder den Bereich vorher bestimmen und einer Variablen zuweisen
set rng = .Range("D1:F29")
Ebenso reicht bei "copTo" einfach "Range("A1")
mfg
Anzeige
AW: Spaltenkopf
08.08.2018 15:04:09
Mia
Ja, mit dem Spaltenkopf geht das. Vielen Dank!
Morgen mache ich mich dann daran, das ganze schöner und flexibler zu machen, mit benanntem Bereich u.ä. Die festen Ranges wollte ich so nicht, nur für die erste Version, damit ich weiß wie es geht.
Wenn ich damit nicht weiterkomme, frage ich nochmal nach, aber bis hierhin schon mal danke!
LG, Mia
Anzeige
AW: Name? Beispiel?
08.08.2018 13:59:47
Mia
Die Variablenbezeichnungen der Suchliste sind auch in den Daten enthalten. Es müsste also was gefunden werden. Daran kann es nicht liegen.
;
Anzeige

Infobox / Tutorial

AdvancedFilter in VBA: So klappt's!


Schritt-für-Schritt-Anleitung

  1. Öffne Deine Excel-Datei und stelle sicher, dass die Tabellenblätter "Suchwerte", "Daten" und "Ergebnisse" existieren.

  2. Fülle die Tabelle "Suchwerte" in den Zellen A1:A10 mit den Variablen-Namen, die Du filtern möchtest.

  3. Stelle sicher, dass die Tabelle "Daten" in Spalte D die Variablen-Namen enthält und in Spalte F die zugehörigen Werte.

  4. Füge den folgenden VBA-Code in ein Modul ein:

    Sub Daten_suchen()
        Sheets("Daten").Range("D1:F10000").AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=Sheets("Suchwerte").Range("A1:A10"), _
        CopyToRange:=Sheets("Ergebnisse").Range("A1:B10"), _
        Unique:=False
    End Sub
  5. Führe das Makro aus. Du solltest jetzt die gefilterten Daten in Deinem Blatt "Ergebnisse" sehen.


Häufige Fehler und Lösungen

  • Fehler: Keine Daten im Ergebnisblatt
    Lösung: Stelle sicher, dass die Variablen in der "Suchwerte"-Liste auch exakt in der "Daten"-Tabelle vorhanden sind. Achte auf Groß- und Kleinschreibung.

  • Fehler: Falscher Bereich
    Lösung: Wenn der Bereich nicht korrekt ist, verwende .CurrentRegion oder setze den Bereich in eine Variable, um ihn dynamischer zu gestalten:

    Dim rng As Range
    Set rng = Sheets("Daten").Range("D1").CurrentRegion
    rng.AdvancedFilter ...

Alternative Methoden

Falls Du keine VBA-Lösung nutzen möchtest, kannst Du den Excel-Funktion "Erweiterter Filter" auch manuell verwenden:

  1. Wähle die gesamte Datenbank in "Daten" aus.
  2. Gehe zu Daten > Sortieren & Filtern > Erweiterter Filter.
  3. Wähle die Kriterien aus dem Bereich "Suchwerte" und definiere den Zielbereich in "Ergebnisse".

Diese Methode ist jedoch weniger flexibel, wenn Du automatisierte Prozesse benötigst.


Praktische Beispiele

Hier ist ein Beispiel, wie Du den AdvancedFilter für einzigartige Werte verwenden kannst:

Sub Einzigartige_Werte()
    Sheets("Daten").Range("D1:F10000").AdvancedFilter _
    Action:=xlFilterCopy, _
    CriteriaRange:=Sheets("Suchwerte").Range("A1:A10"), _
    CopyToRange:=Sheets("Ergebnisse").Range("A1:B10"), _
    Unique:=True
End Sub

Diese Methode filtert nur einzigartige Einträge basierend auf den Variablen-Namen.


Tipps für Profis

  • Verwende benannte Bereiche: Dies macht den Code klarer und flexibler. Statt Sheets("Suchwerte").Range("A1:A10"), definiere einen benannten Bereich für Deine Suchwerte.
  • Nutze xlFilterCopy für das Kopieren: Achte darauf, dass Du den korrekten action:=xlFilterCopy im Code verwendest, um sicherzustellen, dass die Daten korrekt kopiert werden.
  • Teste den Code schrittweise: Wenn Du neue Funktionen hinzufügst, führe den Code regelmäßig aus, um mögliche Fehler frühzeitig zu erkennen.

FAQ: Häufige Fragen

1. Warum funktioniert der Filter nicht?
Der Filter funktioniert nicht, wenn die Suchwerte nicht exakt mit den Werten in der Datenbank übereinstimmen. Überprüfe die Schreibweise und Groß-/Kleinschreibung.

2. Kann ich mehrere Kriterien verwenden?
Ja, Du kannst mehrere Kriterien in der "Suchwerte"-Liste definieren. Stelle sicher, dass sie in separaten Zeilen stehen.

3. Wie kann ich den Code anpassen, um nur bestimmte Spalten zu kopieren?
Du kannst den CopyToRange anpassen, um nur die gewünschten Spalten zu kopieren, z.B. CopyToRange:=Sheets("Ergebnisse").Range("A1:B10").

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige