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

Forumthread: Autofilter mit mehreren Kriterien/Spalte

Autofilter mit mehreren Kriterien/Spalte
17.05.2021 17:47:15
Philip
Hallo zusammen,
ich habe eine Datei in der ich in der Spalte "A" nach gewissen Kriterien filtern möchte (siehe Sub Bikeparts_MRI). Das funktioniert wunderbar. Nun möchte ich diese Filter verfeinern und in Spalte F den Filter verfeinern indem ich bestimmte Werte ausschließe (siehe Sub Bikeparts_MRI2). Der zweite Code gibt mir aber immer einen "Laufzeitfehler 1004" zurück. Wo ist der Fehler?
Grüße Philip
 Sub Bikeparts_MRI()
If Workbooks("Gesamtkundenliste.xlsx").Worksheets("Tabelle1").AutoFilterMode Then Workbooks("Gesamtkundenliste.xlsx").Worksheets("Tabelle1").AutoFilterMode = False
Dim rngFilterRange As Range
Dim lngCriteriaCount As Long
Dim arrCriteria() As String
lngCriteriaCount = 26
ReDim arrCriteria(0 To lngCriteriaCount - 1)
arrCriteria(0) = "60"
arrCriteria(1) = "61"
arrCriteria(2) = "62"
arrCriteria(3) = "63"
arrCriteria(4) = "40"
arrCriteria(5) = "41"
arrCriteria(6) = "42"
arrCriteria(7) = "43"
arrCriteria(8) = "44"
arrCriteria(9) = "45"
arrCriteria(10) = "46"
arrCriteria(11) = "47"
arrCriteria(12) = "76"
arrCriteria(13) = "50"
arrCriteria(14) = "51"
arrCriteria(15) = "52"
arrCriteria(16) = "53"
arrCriteria(17) = "54"
arrCriteria(18) = "55"
arrCriteria(19) = "56"
arrCriteria(20) = "64"
arrCriteria(21) = "65"
arrCriteria(22) = "66"
arrCriteria(23) = "67"
arrCriteria(24) = "68"
arrCriteria(25) = "69"
Set rngFilterRange = Workbooks("Gesamtkundenliste.xlsx").Worksheets("Tabelle1").Range("A1:R1")
rngFilterRange.AutoFilter Field:=1, _
Criteria1:=arrCriteria(), _
Operator:=xlFilterValues
Call Bikeparts_MRI2
End Sub
Sub Bikeparts_MRI2()
If Workbooks("Gesamtkundenliste.xlsx").Worksheets("Tabelle1").AutoFilterMode Then Workbooks("Gesamtkundenliste.xlsx").Worksheets("Tabelle1").AutoFilterMode = False
Dim rngFilterRange As Range
Dim lngCriteriaCount As Long
Dim arrCriteria() As String
lngCriteriaCount = 10
ReDim arrCriteria(0 To lngCriteriaCount - 1)
arrCriteria(0) = "*761*"
arrCriteria(1) = "*762*"
arrCriteria(2) = "*763*"
arrCriteria(3) = "*764*"
arrCriteria(4) = "*765*"
arrCriteria(5) = "*766*"
arrCriteria(6) = "*767*"
arrCriteria(7) = "*769*"
Set rngFilterRange = Workbooks("Gesamtkundenliste.xlsx").Worksheets("Tabelle1").Range("A1:R1")
rngFilterRange.AutoFilter Field:=6, _
Criteria1:=arrCriteria(), _
Operator:=xlFilterValues
End Sub
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilter mit mehreren Kriterien/Spalte
17.05.2021 17:55:07
Hajo_Zi
mein Makro Recoder hat folgendes aufgezeichnet.
ActiveSheet.Range("$A$21:$A$39").AutoFilter Field:=1, Criteria1:=Array( _
"Teilnehmer1", "Teilnehmer2", "Teilnehmer3", "Teilnehmer4", "Teilnehmer5", _
"Teilnehmer6", "Teilnehmer7", "Teilnehmer9"), Operator:=xlFilterValues
GrußformelHomepage
Anzeige
AW: Autofilter mit mehreren Kriterien/Spalte
17.05.2021 18:00:28
Philip
Hallo Hajo,
ich möchte nicht detailliert nach Inhalten filtern, sondern bestimmte Inhalte nicht mehr anzeigen. Mit dem Recorder hab ich´s auch schon probiert mit "beginnt nicht mit". Leider ohne Erfolg.
Grüße
AW: Autofilter mit mehreren Kriterien/Spalte
17.05.2021 18:10:38
Daniel
Hi
Das filtern mit "beginnt mit", "enthält" usw funktioniert mit maximal zwei Kriterien dieser Art, anzugeben. In Criteria1 und Criteria2.
Im Filterarray müssen immer alle Werte, die angezeigt werden sollen, mindestens 1x vollständig vorhanden sein.
Das Filterarray kann keine Jokerzeichen oder vergleiche verarbeiten, hier gilt immer nur der vergleichstyp "ist gleich".
Gruß Daniel
Anzeige
AW: Autofilter mit mehreren Kriterien/Spalte
18.05.2021 07:01:57
Philip
Hi Daniel,
wenn ich aber den Fall habe, dass ich nicht genau weiß was in der Spalte alles drin steht und ich nur haben möchte, dass die genannten Werte nicht drin stehen? Der Rekorder mit Array gibt mir aus, dass ich zu viele Zeilen benötige und bricht ab.
Grüße
AW: Autofilter mit mehreren Kriterien/Spalte
18.05.2021 09:03:03
Daniel
Hi
Ja mit dem Recorder ist sowas nicht mehr aufzeichenbar.
Hier musst du selber programmieren und mit einer Schleife über die Werte der Tabelle laufen und dabei das Array für deren Filter erstellen.
Gruß Daniel
Anzeige
AW: Autofilter mit mehreren Kriterien/Spalte
18.05.2021 09:11:05
Philip
Hi Daniel,
wenn ich das mit dem Array richtig verstanden habe, muss ich hier alle Werte angeben, die ich behalten möchte. Wenn ich aber nicht alle Werte kenne, die ich behalten möchte, sondern nur den Anfang der Werte, die ich behalten möchte, wie kann ich das angeben?
Grüße
AW: Autofilter mit mehreren Kriterien/Spalte
18.05.2021 10:00:04
Daniel
1. Übernehmer die Spalte in der du Filtern willst in ein Array. Dies ist zunächst einmal 2-dimensional.
2. erstellte ein 1-dimensionales Array mit gleicher Elementanzahl.
3. Laufe mit einer Schleife über die Elemente des ersten Arrays.
Prüfe, ob der Wert angezeigt werden soll und wenn ja, übertrage ihn ins 1-d-Array, ansonsten lässt du die Position leer.
4. verwende das 1-d-Array als Filter Kriterium.
Gruß Daniel
Anzeige
AW: Autofilter mit mehreren Kriterien/Spalte
18.05.2021 13:00:34
Philip
Hi Daniel,
danke, aber die Lösung übersteigt meine Fähigkeiten. Hinzu kommt, dass Schleifen in der Datei (über 23k) Zeilen ziemlich lange arbeiten und dann das manuelle Filter setzen der schnellere Weg ist.
Grüße
AW: Autofilter mit mehreren Kriterien/Spalte
18.05.2021 15:56:51
Daniel
eine Frage wie man es programmiert.
wenn man sich die Daten erst in ein Array kopiert und die Schleife über das Array laufen lässt und nicht über die Excelzellen, dann geht das in der Regel sehr schnell.
Gruß Daniel
Anzeige
AW: Autofilter mit mehreren Kriterien/Spalte
19.05.2021 07:38:13
Philip
Hi Daniel,
das übersteigt leider meine Fähigkeiten. VBA ist nicht mein Steckenpferd.
Kannst du mir den Ansatz zeigen?
Grüße
AW: Autofilter mit mehreren Kriterien/Spalte
19.05.2021 11:18:34
Daniel
Hi
im Prinzip so:

dim arrTab
dim arrFilter
dim i as long
const FilterSpalte as long = 6 'filterspalte, ggf anpassen
arrTab = ActiveSheet.Usdrange.columns(Filterspalte).value
redim arrFilter(1 to Ubound(arrTab, 1))
for i = 1 to ubound(arrTab) 'hier dann die Bedingungsprüfung, ob der Wert angezeigt werden soll oder nicht
if arrTab(i, 1) = ? Then
arrFilter(i) = ArrTab(i, 1)
end if
Next
Activesheet.Usedrange.autofilter Field:=FilterSpalte, Criteria1:=arrFilter, Operator:=xlFilterValues
Gruß Daniel
Anzeige
AW: Autofilter mit mehreren Kriterien/Spalte
20.05.2021 10:20:12
Philip
Hallo Daniel,
danke für den Ansatz. Ich habe es nach bestem Wissen angepasst. Leider bekomme ich dauernd den "Laufzeitfehler 13 - Typen unverträglich".
Grüße Philip

Sub Bikeparts_MRI2()
Dim arrTab
Dim arrFilter
Dim i As Long
arrTab = Workbooks("Gesamtkundenliste.xlsx").Worksheets("Tabelle1").UsedRange.Columns(6).Value
ReDim arrFilter(1 To UBound(arrTab, 1))
For i = 1 To UBound(arrTab)
If arrTab(i, 1) = Array("761*", "762*", "763*", "764*", "765*", "766*", "769*") Then
arrFilter(i) = arrTab(i, 1)
End If
Next
Workbooks("Gesamtkundenliste.xlsx").Worksheets("Tabelle1").AutoFilter Field:=6, Criteria1:=arrFilter, Operator:=xlFilterValues
End Sub

Anzeige
AW: Autofilter mit mehreren Kriterien/Spalte
20.05.2021 16:15:03
Daniel
naja, das kann VBA dann so nicht
VBA ist nicht der Autofilter.
das müsstest du, wenn ich dich richtig verstanden habe, so programmieren:

If not arrTab(i, 1) like "76[1234569]*" Then
arrFilter(i) = arrTab(i, 1)
end if
oder auch so, wenn du Like nicht kennst:

Select Case Left(arrTab(i, 1), 3)
Case "761", "762", "763", "764", "765", "766", "769"
Case else
arrFilter(i) = arrTab(i, 1)
end Select
oder auch so:

if Instr("761|762|763|764|765|766|769", left(arrTab(i, 1), 2)) = 0 Then
arrFilter(i) = arrTab(i, 1)
end if
Gruß Daniel
Anzeige
AW: Autofilter mit mehreren Kriterien/Spalte
21.05.2021 07:49:08
Philip
Hi Daniel,
ich glaube, ich bin einfach zu blöd dafür. Ich ersetze den if-Block aus meinem Code durch einen von den deinen und lösche die letzte Zeile, die den Autofilter beinhaltet. Excel scheint etwas zu tun, es kommt kein Fehler mehr, aber es passiert auch nichts.

Sub Bikeparts_MRI2()
Dim arrTab
Dim arrFilter
Dim i As Long
arrTab = Workbooks("Gesamtkundenliste.xlsx").Worksheets("Tabelle1").UsedRange.Columns(6).Value
ReDim arrFilter(1 To UBound(arrTab, 1))
For i = 1 To UBound(arrTab)
If Not arrTab(i, 1) Like "76[1234569]*" Then
arrFilter(i) = arrTab(i, 1)
End If
Next
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Autofilter mit mehreren Kriterien in Excel


Schritt-für-Schritt-Anleitung

Um den Excel Autofilter mit mehreren Kriterien zu verwenden, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Öffne die Excel-Datei und stelle sicher, dass du die Daten hast, die gefiltert werden sollen.

  2. Aktiviere das VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge ein neues Modul hinzu:

    • Rechtsklicke auf "VBAProject (DeineDateiName)" und wähle „Einfügen“ > „Modul“.
  4. Kopiere den folgenden Code in das Modul:

    Sub FilterMitMehrerenKriterien()
       Dim rngFilterRange As Range
       Dim arrCriteria() As String
       Dim lngCriteriaCount As Long
    
       lngCriteriaCount = 6
       ReDim arrCriteria(0 To lngCriteriaCount - 1)
       arrCriteria(0) = "Wert1"
       arrCriteria(1) = "Wert2"
       arrCriteria(2) = "Wert3"
       arrCriteria(3) = "Wert4"
       arrCriteria(4) = "Wert5"
       arrCriteria(5) = "Wert6"
    
       Set rngFilterRange = ThisWorkbook.Worksheets("Tabelle1").Range("A1:R1")
       rngFilterRange.AutoFilter Field:=1, Criteria1:=arrCriteria, Operator:=xlFilterValues
    End Sub
  5. Passe die arrCriteria-Werte an, um die gewünschten Filterkriterien festzulegen.

  6. Führe das Makro aus:

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

Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Dieser Fehler tritt häufig auf, wenn das Filterkriterium nicht korrekt definiert ist. Stelle sicher, dass das Array richtig dimensioniert ist und die Werte korrekt zugewiesen sind.

  • Typen unverträglich: Achte darauf, dass du keine Arrays in Bedingungen verwendest, die nicht dafür vorgesehen sind. Verwende stattdessen Schleifen, um Werte zu überprüfen.

  • Kein Filterergebnis: Wenn nach dem Ausführen des Filters keine Ergebnisse angezeigt werden, vergewissere dich, dass die Kriterien tatsächlich in der Datenquelle vorhanden sind.


Alternative Methoden

Neben dem VBA Autofilter mit mehreren Kriterien gibt es auch andere Wege, um Daten in Excel zu filtern:

  • Excel erweiterter Filter: Diese Methode ermöglicht es dir, komplexere Filterbedingungen zu verwenden und Daten in einen anderen Bereich zu kopieren.

  • Excel Filter Formel mit mehreren Kriterien: Verwende die FILTER-Funktion in neueren Excel-Versionen, um dynamisch Daten mit mehreren Kriterien zu filtern.

  • Access VBA Filter mehrere Kriterien: Wenn du mit Access arbeitest, kannst du ähnliche Filtermethoden in VBA verwenden, um Daten zu filtern.


Praktische Beispiele

Hier sind einige praktische Beispiele für das Filtern in Excel:

  1. Filtern nach mehreren Werten:

    arrCriteria(0) = "Teilnehmer1"
    arrCriteria(1) = "Teilnehmer2"
  2. Filtern und Ausschließen von Werten:

    If Not arrTab(i, 1) Like "76[1234569]*" Then
       arrFilter(i) = arrTab(i, 1)
    End If
  3. Verwendung von xlFilterValues:

    rngFilterRange.AutoFilter Field:=1, Criteria1:=arrCriteria, Operator:=xlFilterValues

Tipps für Profis

  • Nutze Schleifen, um dynamisch Filterkriterien zu generieren, anstatt sie manuell einzugeben.
  • Verwende Array-Operationen, um die Performance zu verbessern, besonders bei großen Datensätzen.
  • Teste regelmäßig deinen Code und verwende Debug.Print, um die Werte von Variablen während der Ausführung zu überprüfen.

FAQ: Häufige Fragen

1. Wie viele Kriterien kann ich beim Autofilter verwenden? Du kannst bis zu 255 Kriterien in einem Array verwenden.

2. Funktioniert dieser Code in Excel 2016? Ja, der VBA-Code ist mit Excel 2016 und neueren Versionen kompatibel.

3. Was ist der Unterschied zwischen Criteria1 und Criteria2? Criteria1 wird für die Hauptbedingungen verwendet, während Criteria2 zusätzlich für eine weitere Bedingung genutzt werden kann, meist in Kombination mit dem Operator.

4. Kann ich Filter auch ohne VBA setzen? Ja, du kannst auch die Filteroptionen direkt über das Excel-Menü nutzen, jedoch bietet VBA mehr Flexibilität bei komplexen Anforderungen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige