Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1828to1832
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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
Anzeige
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
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
Anzeige
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
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
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

312 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige