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

Forumthread: Per Makro Filter setzen

Per Makro Filter setzen
25.10.2016 08:51:49
onkelbobby
Hallo zusammen,
per Makrorecorder habe ich mir in einer Datei ein funktionierendes Makro eingerichtet, das mir Dateien öffnet, Filter setzt, ausdruckt und die Datei wieder schliesst.
Hintergrund: Für mehrere Gebiete sollen monatlich Daten aus verschiedenen Dateien ausgewertet werden und per pdf-Drucker in eine pdf-Datei pro Gebiet zusammengefügt werden.
Es handelt sich um ca. 10 Exceldateien, die laufend aktualisert werden.
Um nicht im Makro ständig die Daten des Gebiets und Monats auszutauschen würde ich gerne in der Datei festlegen welchen Monat und welches Gebiet ich auswerten möchte.
Die Daten sollen z. B. in Zelle B1 (Gebiet) und B2 (Monat) eingetragen werden und dann das Makro entsprechend für die eingetragenen Daten erzeugt werden (= die Filter in den Excel-Dateien entsprechend gesetzt werden).
Aktuell hat mir der Recorder die Daten so eingetragen:
Beispiel 1:
ActiveSheet.Range("$B$9:$S$54").AutoFilter Field:=2, Criteria1:= _
"Gebiet 1"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
ActiveWorkbook.Close savechanges:=False
Beispiel 2:
ActiveWorkbook.SlicerCaches("Datenschnitt_Monat").ClearManualFilter
With ActiveWorkbook.SlicerCaches("Datenschnitt_Monat")
.SlicerItems("9").Selected = True
.SlicerItems("1").Selected = False
.SlicerItems("2").Selected = False
.SlicerItems("3").Selected = False
.SlicerItems("4").Selected = False
.SlicerItems("5").Selected = False
.SlicerItems("6").Selected = False
.SlicerItems("7").Selected = False
.SlicerItems("8").Selected = False
.SlicerItems("(Leer)").Selected = False
End With
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Diese Beispiele tauchen im Makro mehrfach auf (pro Datei) und ich müsste aktuell sehr viel manuell machen.
Wie muss ich die beiden Makros umschreiben um in Abhängigkeit der Zellen B1 und B2 die richtigen Filter zu setzen.
In A1 steht "Gebiet" in B1 eine Zahl von 1 - 15 in A2 "Monat" und in B2 eine Zahl von 1 - 12.
Danke für Eure Hilfe!
Robert
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Per Makro Filter setzen
25.10.2016 10:04:36
UweD
Hallo
Die Zellinhalte kannst du so einbauen.
Was mir unklar ist, wo du die Monatswerte eingibst.
Evtl. solltest du mal eine Musterdatei hochladen.

Sub dgdgd()
With ActiveSheet
If .AutoFilterMode Then .AutoFilterMode = False 'Filter ausschalten
.Range("$B$9:$S$54").AutoFilter Field:=2, _
Criteria1:=.Range("A1") & " " & Range("B1")
ActiveWindow.SelectedSheets.PrintOut Copies:=1, _
Collate:=True, ignorePrintAreas:=False
ActiveWorkbook.Close savechanges:=False
With ActiveWorkbook.SlicerCaches("Datenschnitt_" & .Range("A2"))
.ClearManualFilter
.SlicerItems("9").Selected = True
.SlicerItems("1").Selected = False
.SlicerItems("2").Selected = False
.SlicerItems("3").Selected = False
.SlicerItems("4").Selected = False
.SlicerItems("5").Selected = False
.SlicerItems("6").Selected = False
.SlicerItems("7").Selected = False
.SlicerItems("8").Selected = False
.SlicerItems("(Leer)").Selected = False
End With
ActiveWindow.SelectedSheets.PrintOut Copies:=1, _
Collate:=True, ignorePrintAreas:=False
End With
End Sub
LG UweD
Anzeige
AW: Per Makro Filter setzen
25.10.2016 14:35:04
onkelbobby
Hallo Uwe,
danke für Deine Hilfe!
Leider funktioniert das Makro nicht. Der Filter wird in der Datei zwar gesetzt, jedoch nicht der gewünschte Filterwert gezeigt (das Ergebnis bleibt leer).
Im Anhang habe ich mal zwei Beispieldateien (Pfad der Datei muss noch im Makro entsprechend geändert werden).
Die Filterung des Monats (ist in einer anderen Datei) findet über ein "Datenschnittfenster" einer Pivottabelle statt. Geht das auch mit einem Makro oder sollte ich die Filterung anders gestalten.
Danke für weitere Hilfe!
https://www.herber.de/bbs/user/109011.xlsm
https://www.herber.de/bbs/user/109010.xlsx
Anzeige
AW: Per Makro Filter setzen
25.10.2016 15:08:37
UweD
Hi
Das mit der zweiten Datei habe ich angepasst.
Sub dgdgd()
Dim TB
Set TB = ThisWorkbook.Sheets("Tabelle1")
Workbooks.Open Filename:="C:\Temp\Mappe2.xlsx"
Sheets("Tabelle1").Select
With ActiveSheet
If .AutoFilterMode Then .AutoFilterMode = False 'Filter ausschalten
.Range("$B$9:$S$54").AutoFilter Field:=2, _
Criteria1:=TB.Range("A1") & " " & TB.Range("B1")
End With
End Sub
zwischen Gebiet und der Ziffer steht noch ein Leerzeichen


Teil2 versteh ich nicht. deshalb offen
LG UweD
Anzeige
AW: Per Makro Filter setzen
25.10.2016 15:38:53
onkelbobby
Hallo Uwe,
danke für Deine Unterstützung. Die ersten Filter funktionieren schon mal.
Die Tabellen die ich für die Monate filtern will, sind Pivottabellen. Ich habe dort jeweils über die Pivot-Table-Tools einen "Datenschnitt" eingefügt, um mit einem Klick den gewünschten Monat zu filtern. Wenn ich nun die Filterung per Makro aufnehme wird mir das in unten stehender Form angezeigt:
ActiveWorkbook.SlicerCaches("Datenschnitt_Monat").ClearManualFilter
With ActiveWorkbook.SlicerCaches("Datenschnitt_Monat")
.SlicerItems("9").Selected = True
.SlicerItems("1").Selected = False
.SlicerItems("2").Selected = False
.SlicerItems("3").Selected = False
.SlicerItems("4").Selected = False
.SlicerItems("5").Selected = False
.SlicerItems("6").Selected = False
.SlicerItems("7").Selected = False
.SlicerItems("8").Selected = False
.SlicerItems("(Leer)").Selected = False
End With
Wie kann ich hier in B2 den Monat angeben (z. B. "9") damit mir der entsprechende Monat angezeigt wird. Es müssten ja praktisch der Wert von 9 auf True und alle anderen auf False gesetzt werden. Oder gibts hier einen ganz anderen Ansatz?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Makro zum Setzen von Filtern in Excel


Schritt-für-Schritt-Anleitung

Um ein Excel-Makro zu erstellen, das Filter setzt, befolge diese Schritte:

  1. Makro erstellen:

    • Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
    • Wähle Einfügen > Modul, um ein neues Modul zu erstellen.
  2. Code einfügen:

    • Füge den folgenden VBA-Code in das Modul ein:
    Sub SetzenFilter()
       Dim Gebiet As String
       Dim Monat As String
    
       Gebiet = Range("B1").Value
       Monat = Range("B2").Value
    
       With ActiveSheet
           If .AutoFilterMode Then .AutoFilterMode = False 'Filter ausschalten
           .Range("$B$9:$S$54").AutoFilter Field:=2, Criteria1:=gebiet
       End With
    
       With ActiveWorkbook.SlicerCaches("Datenschnitt_Monat")
           .ClearManualFilter
           Dim i As Integer
           For i = 1 To 12
               .SlicerItems(CStr(i)).Selected = (i = Monat)
           Next i
       End With
    
       ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
       ActiveWorkbook.Close savechanges:=False
    End Sub
  3. Makro ausführen:

    • Gehe zurück zu Excel, drücke ALT + F8, wähle SetzenFilter und klicke auf „Ausführen“.

Häufige Fehler und Lösungen

  • Filterwerte werden nicht angezeigt:

    • Überprüfe, ob die Daten in den Zellen B1 und B2 korrekt sind und den erwarteten Werten entsprechen.
  • Slicer funktioniert nicht:

    • Stelle sicher, dass der Slicer mit dem richtigen Namen ("Datenschnitt_Monat") angegeben ist und korrekt in der Pivot-Tabelle vorhanden ist.
  • Makro läuft nicht:

    • Überprüfe, ob Du die Makros in Excel aktiviert hast und ob die Datei im richtigen Format (.xlsm) gespeichert ist.

Alternative Methoden

Wenn Du Filter setzen in Excel ohne VBA-Makros bevorzugst, kannst Du die folgenden Methoden ausprobieren:

  • Datenfilter nutzen:

    • Wähle die Daten aus, gehe zu „Daten“ > „Filter“ und setze die gewünschten Filter direkt in der Benutzeroberfläche.
  • Formeln:

    • Benutze Excel-Formeln, um die gewünschten Daten in eine neue Tabelle zu extrahieren, anstatt die Filterfunktion zu verwenden.

Praktische Beispiele

  1. Beispiel für das Setzen eines Filters:

    • Angenommen, Du hast eine Tabelle mit Verkaufsdaten. Du kannst das Makro verwenden, um nur die Daten für „Region 1“ und den Monat „Januar“ anzuzeigen, indem Du in B1 „1“ und in B2 „1“ eingibst.
  2. Drucken gefilterter Daten:

    • Das Makro druckt automatisch die gefilterten Daten. Stelle sicher, dass der Drucker korrekt eingerichtet ist.

Tipps für Profis

  • Debugging: Verwende „Debug.Print“ im Code, um Werte während der Ausführung zu überprüfen.

  • Optimierung des Codes: Halte den Code sauber und gut kommentiert, um die Lesbarkeit und Wartbarkeit zu verbessern.

  • Variablen anpassen: Passe die Variablen an, um verschiedene Filterkriterien zu verwenden, ohne den gesamten Code ändern zu müssen.


FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um mehrere Filter gleichzeitig zu setzen? Du kannst zusätzliche Filterbedingungen im Code hinzufügen, indem Du weitere AutoFilter-Methoden verwendest.

2. Funktioniert das Makro in allen Excel-Versionen? Das oben dargestellte Makro sollte in den meisten modernen Excel-Versionen (Excel 2010 und höher) einwandfrei funktionieren. Achte darauf, dass die VBA-Funktionen unterstützt werden.

3. Was ist der Unterschied zwischen AutoFilter und Slicer? AutoFilter ist eine Funktion, die direkt in den Daten verwendet wird, während Slicer eine visuelle Schnittstelle für die Filterung von Pivot-Tabellen ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige