Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Autofilter über mehrere Tabellenblätter

Autofilter über mehrere Tabellenblätter
21.05.2008 13:25:06
Markus
Hallo liebe Excel Freunde,
https://www.herber.de/bbs/user/52514.xls
Ich habe eine Datei mit Tabellen in vielen Tabellenblättern (Prinzip siehe Datei im Upload).
Alle sind bezüglich Zeilen- und Spaltenbeschriftung identisch (durch Blatt kopieren erzeugt)
Autofilter bei allen in Spalte A, B und C.
Die Werte in den Spalten D...E sind jedoch in jedem Tabellenblatt unterschiedlich.
Ich muss jeweils dieselbe Auswahl in allen Tabellenblättern anschauen.
Gibt es eine Möglichkeit mit einem Makro die Selektion von Autofilter in den Spalten A...C von Tabelle 1 automatisch auf die Auswahl von anderen Tabellenblättern zu übertragen. Dies würde mir eine enorme Zeitersparnis bringen?
Vielen Dank für Eure Hinweise und beste Grüsse
Markus

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilter über mehrere Tabellenblätter
21.05.2008 14:51:00
Renee
Hi Markus,
Kopiere diesen Code in die Tabelle1.
Ein Doppelklick auf die Zelle A1 sollte alle Autofilter aller Tabelleblätter gleichstellen.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim iX As Integer, iXF As Integer
Dim arrFilter()
If Target.Address  "$A$1" Then Exit Sub
Cancel = True
Application.EnableEvents = False
With ActiveSheet.AutoFilter
With .Filters
ReDim arrFilter(1 To .Count, 1 To 3)
For iXF = 1 To .Count
With .Item(iXF)
If .On Then
arrFilter(iXF, 1) = .Criteria1
If .Operator Then
arrFilter(iXF, 2) = .Operator
arrFilter(iXF, 3) = .Criteria2
End If
End If
End With
Next
End With
End With
For iX = 2 To ActiveWorkbook.Worksheets.Count
With ActiveWorkbook.Worksheets(iX)
On Error Resume Next
.ShowAllData
On Error GoTo 0
For iXF = 1 To UBound(arrFilter(), 1)
If Not IsEmpty(arrFilter(iXF, 1)) Then
If arrFilter(iXF, 2) Then
.Range("A1:C1").AutoFilter field:=iXF, Criteria1:=arrFilter(iXF, 1), _
Operator:=arrFilter(iXF, 2), Criteria2:=arrFilter(iXF, 3)
Else
.Range("A1:C1").AutoFilter _
field:=iXF, Criteria1:=arrFilter(iXF, 1)
End If
End If
Next iXF
End With
Next iX
MsgBox " Autofilter auf allen Blättern" & vbCrLf & _
"gemäss Blatt " & ActiveSheet.Name & " gesetzt!", _
vbOKOnly + vbInformation, "Auto-Autofilter"
Application.EnableEvents = True
End Sub


GreetZ Renée

Anzeige
AW: Autofilter über mehrere Tabellenblätter
21.05.2008 15:51:00
Markus
Hallo Renee,
Vielen herzlichen Dank für Deine Arbeit. Ich habe z.Z. keinen Zugriff auf die Originaldatei und brauche deshalb noch Zeit um Deinen Vorschlag einzubauen und zu testen.
Eine Frage vorab:
Im Original hat es noch weitere Tabellenblätter (ohne Autofilter). Wird das Makro trotzdem funktionieren?
Herzliche Grüsse
Markus

Anzeige
AW: Autofilter über mehrere Tabellenblätter
21.05.2008 16:33:00
Renee
Hi Markus,
Warum war die Information nicht in der Anfrage vorhanden.
Solche Sachen sind wichtig. Nein es wird nicht funktionieren.
Dann müssen die 'anderen' Blätter gezielt ausgeschlossen werden. Dazu müsste ich entweder die Blätternamen oder Indeces der 'Ausschluss'blätter wissen.
GreetZ Renée

Anzeige
AW: Autofilter über mehrere Tabellenblätter
21.05.2008 17:46:00
Markus
Hallo Renee,
Tut mir echt leid, die Originaldatei ist viel zu gross und enthält vertrauliche Daten. Ich habe deshalb versucht, das Problem mit einem Beispiel auf das wesentliche zu reduzieren.
Es gibt insgesamt 9 Tabellenblätter:
Tabellenblätter mit Autofilter (Auswahlfeld jeweils B5/C5/D5/E5):
Werk_0200
Werk_1600
Werk_1800
Werk_2900
Werk_2000

Tabellenblätter ohne Autofilter:
Download_SQ01
Download_MatNeu
Tabellen
Anleitung

Nochmals vielen Dank für Deine Geduld und beste Grüsse
Markus

Anzeige
AW: Autofilter über mehrere Tabellenblätter
21.05.2008 19:45:00
Renee
Hi Markus,
Ok. Der Code kann theoretisch in jedes Blatt mit Namen Werk_ kopiert werden. Er setzt alle Autofilter in diesen Blättern gleich (bei Doppelklick in die Zelle A1), wie das jeweilige aktive 'Werk_'Blatt.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim iX As Integer, iXF As Integer
Dim arrFilter()
If Target.Address  "$A$1" Then Exit Sub
Cancel = True
Application.EnableEvents = False
With ActiveSheet.AutoFilter
With .Filters
ReDim arrFilter(1 To .Count, 1 To 3)
For iXF = 1 To .Count
With .Item(iXF)
If .On Then
arrFilter(iXF, 1) = .Criteria1
If .Operator Then
arrFilter(iXF, 2) = .Operator
arrFilter(iXF, 3) = .Criteria2
End If
End If
End With
Next
End With
End With
For iX = 1 To ActiveWorkbook.Worksheets.Count
If Left(ActiveWorkbook.Worksheets(iX).Name, 5) = "Werk_" And _
ActiveWorkbook.Worksheets(iX).Name  ActiveSheet.Name Then
With ActiveWorkbook.Worksheets(iX)
On Error Resume Next
.ShowAllData
On Error GoTo 0
For iXF = 1 To UBound(arrFilter(), 1)
If Not IsEmpty(arrFilter(iXF, 1)) Then
If arrFilter(iXF, 2) Then
.Range("A1:C1").AutoFilter field:=iXF, Criteria1:=arrFilter(iXF, 1), _
Operator:=arrFilter(iXF, 2), Criteria2:=arrFilter(iXF, 3)
Else
.Range("A1:C1").AutoFilter _
field:=iXF, Criteria1:=arrFilter(iXF, 1)
End If
End If
Next iXF
End With
End If
Next iX
MsgBox " Autofilter auf allen Blättern" & vbCrLf & _
"gemäss Blatt " & ActiveSheet.Name & " gesetzt!", _
vbOKOnly + vbInformation, "Auto-Autofilter"
Application.EnableEvents = True
End Sub


GreetZ Renée

Anzeige
Elimination von Fehlerquellen/Autofilter
21.05.2008 20:19:00
Fehlerquellen/Autofilter
Hi Markus,
Im folgenden Code sind noch einige Fehlerquellen eliminiert:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim iX As Integer, iXF As Integer
Dim arrFilter()
If Target.Address  "$A$1" Then Exit Sub
Cancel = True
If ActiveSheet.AutoFilterMode = False Then Exit Sub
Application.EnableEvents = False
With ActiveSheet.AutoFilter
With .Filters
ReDim arrFilter(1 To .Count, 1 To 3)
For iXF = 1 To .Count
With .Item(iXF)
If .On Then
arrFilter(iXF, 1) = .Criteria1
If .Operator Then
arrFilter(iXF, 2) = .Operator
arrFilter(iXF, 3) = .Criteria2
End If
End If
End With
Next
End With
End With
For iX = 1 To ActiveWorkbook.Worksheets.Count
If Left(ActiveWorkbook.Worksheets(iX).Name, 5) = "Werk_" And _
ActiveWorkbook.Worksheets(iX).Name  ActiveSheet.Name Then
With ActiveWorkbook.Worksheets(iX)
On Error Resume Next
.ShowAllData
On Error GoTo 0
For iXF = 1 To UBound(arrFilter(), 1)
If Not IsEmpty(arrFilter(iXF, 1)) Then
If arrFilter(iXF, 2) Then
.Cells.AutoFilter field:=iXF, Criteria1:=arrFilter(iXF, 1), _
Operator:=arrFilter(iXF, 2), Criteria2:=arrFilter(iXF, 3)
Else
.Cells.AutoFilter field:=iXF, Criteria1:=arrFilter(iXF, 1)
End If
End If
Next iXF
End With
End If
Next iX
MsgBox " Autofilter auf allen Blättern" & vbCrLf & _
"gemäss Blatt " & ActiveSheet.Name & " gesetzt!", _
vbOKOnly + vbInformation, "Auto-Autofilter"
Application.EnableEvents = True
End Sub


GreetZ Renée

Anzeige
AW: Elimination von Fehlerquellen/Autofilter
22.05.2008 08:22:00
Fehlerquellen/Autofilter
Hallo Renee,
Ich habe deinen Code implementiert. Funktioniert exakt so, wie ich es mir vorgestellt habe.
Ich bin restlos begeistert!
Ich spare enorm viel Zeit und Nerven, da die Datei (möglicherweise wegen vieler Berechnungsformeln und bedingten Formatierungen über Formeln) sehr langsam ist.
Bildaufbau bei Blattwechsel: 10 sec (bei Berechnung auf manuell)
Neuberechnung: ca 1 min.
Nochmals vielen herzlichen Dank für Deine Unterstützung und Grüsse aus der Schweiz
Markus
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Autofilter über mehrere Tabellenblätter synchronisieren


Schritt-für-Schritt-Anleitung

Um den Autofilter in Excel über mehrere Tabellenblätter hinweg zu synchronisieren, kannst du folgenden VBA-Code verwenden. Dieser Code sorgt dafür, dass bei einem Doppelklick auf Zelle A1 alle Autofilter auf den Blättern, die mit "Werk_" beginnen, entsprechend der Auswahl in dem aktuell aktiven Blatt gesetzt werden.

  1. Öffne die Excel-Datei, in der du den Autofilter über mehrere Tabellenblätter anwenden möchtest.
  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Wähle im Projektfenster das Tabellenblatt "Tabelle1" aus.
  4. Kopiere den folgenden Code in das Codefenster:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim iX As Integer, iXF As Integer
    Dim arrFilter()
    If Target.Address <> "$A$1" Then Exit Sub
    Cancel = True
    If ActiveSheet.AutoFilterMode = False Then Exit Sub
    Application.EnableEvents = False
    With ActiveSheet.AutoFilter
        With .Filters
            ReDim arrFilter(1 To .Count, 1 To 3)
            For iXF = 1 To .Count
                With .Item(iXF)
                    If .On Then
                        arrFilter(iXF, 1) = .Criteria1
                        If .Operator Then
                            arrFilter(iXF, 2) = .Operator
                            arrFilter(iXF, 3) = .Criteria2
                        End If
                    End If
                End With
            Next
        End With
    End With
    For iX = 1 To ActiveWorkbook.Worksheets.Count
        If Left(ActiveWorkbook.Worksheets(iX).Name, 5) = "Werk_" And _
        ActiveWorkbook.Worksheets(iX).Name <> ActiveSheet.Name Then
            With ActiveWorkbook.Worksheets(iX)
                On Error Resume Next
                .ShowAllData
                On Error GoTo 0
                For iXF = 1 To UBound(arrFilter(), 1)
                    If Not IsEmpty(arrFilter(iXF, 1)) Then
                        If arrFilter(iXF, 2) Then
                            .Cells.AutoFilter field:=iXF, Criteria1:=arrFilter(iXF, 1), _
                            Operator:=arrFilter(iXF, 2), Criteria2:=arrFilter(iXF, 3)
                        Else
                            .Cells.AutoFilter field:=iXF, Criteria1:=arrFilter(iXF, 1)
                        End If
                    End If
                Next iXF
            End With
        End If
    Next iX
    MsgBox "Autofilter auf allen Blättern" & vbCrLf & _
    "gemäss Blatt " & ActiveSheet.Name & " gesetzt!", _
    vbOKOnly + vbInformation, "Auto-Autofilter"
    Application.EnableEvents = True
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Klicke doppelt auf die Zelle A1 im aktiven Tabellenblatt, um den Autofilter zu setzen.

Häufige Fehler und Lösungen

  • Fehler: Autofilter funktioniert nicht auf allen Blättern
    Lösung: Stelle sicher, dass die Blätter, auf denen der Autofilter gesetzt werden soll, mit "Werk_" beginnen. Der Code schließt andere Blätter aus.

  • Fehler: Doppelklick funktioniert nicht
    Lösung: Überprüfe, ob der Code im richtigen Tabellenblatt eingefügt wurde und ob die Zelle A1 tatsächlich angeklickt wird.

  • Fehler: Makro wird nicht ausgeführt
    Lösung: Überprüfe, ob Makros in deiner Excel-Instanz aktiviert sind. Gehe zu „Datei“ > „Optionen“ > „Trust Center“ und aktiviere die Makros.


Alternative Methoden

  • Excel 2 Filter gleichzeitig anwenden: Du kannst auch den „Erweiterten Filter“ verwenden, um Daten aus mehreren Tabellenblättern zu extrahieren, jedoch erfordert dies manuelle Einstellungen.

  • Power Query: Eine leistungsstarke Methode, um Daten aus mehreren Tabellenblättern zu kombinieren und zu filtern. Du kannst Daten aus verschiedenen Blättern importieren und dann die Filterfunktionen in Power Query nutzen.


Praktische Beispiele

Angenommen, du hast folgende Blätter:

  • Werk_0200
  • Werk_1600
  • Werk_1800

Wenn du im „Werk0200“ Blatt einen Filter auf die Spalte A gesetzt hast, kannst du durch Doppelklick auf A1 diesen Filter automatisch auf die anderen „Werk“-Blätter anwenden.


Tipps für Profis

  • Verwende das Makro für mehrere Filter: Du kannst den Code erweitern, um mehrere Filter auf einem Tabellenblatt gleichzeitig anzuwenden, indem du zusätzliche Bedingungen im Code einfügst.

  • Optimierung der Performance: Bei großen Datenmengen kann die Verwendung von Arrays und das Minimieren der Bildschirmaktualisierungen die Performance verbessern.


FAQ: Häufige Fragen

1. Funktioniert der Code in Excel 365?
Ja, der Code sollte auch in Excel 365 funktionieren, solange Makros aktiviert sind.

2. Kann ich den Autofilter auf mehrere Tabellen gleichzeitig filtern?
Ja, der bereitgestellte Code ermöglicht es, den Autofilter auf mehrere Tabellenblätter anzuwenden, solange diese entsprechend benannt sind.

3. Wie kann ich den Code anpassen, um weitere Blätter auszuschließen?
Du kannst die Zeilen, die die Bedingung für das Filtern überprüfen, anpassen, um weitere Blätter auszuschließen, indem du zusätzliche Namen hinzufügst.

4. Muss ich den Code in jedes Blatt einfügen?
Nein, der Code sollte nur im ersten Blatt eingefügt werden, von dem du die Filterung starten möchtest.

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