Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1296to1300
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
Autofilter per VBA mit "contains" aus Array
12.02.2013 13:00:50
Klaus
Moin Moin,
ich möchte gerne per VBA den Autofilter setzen. Er soll mir jeden Eintrag holen, der das Wort "Fleisch" oder "Fisch" enthält.
In meiner Spalte B steht (string, durch Leerzeichen getrennt)
2 Obst
3 Fleisch
4 Aufschnitt Fleisch
5 Gemüse
6 Aufschnitt Fisch
7 Fisch Konserve
8 Gemüse
9 Fisch
Ich möchte, dass der Filter die Zeilen 3,4,6,7,9 findet.
Der Rekorder schmeist dafür dieses raus, das auch funktioniert

ActiveSheet.Range("$A$1:$B$70").AutoFilter Field:=2, Criteria1:= _
"=*Fleisch*", Operator:=xlOr, Criteria2:="=*Fisch*"

Jetzt möchte ich das aber über eine Userform etwas anwenderfreundlicher haben. Der User soll in einer ListBox mit multiselect die Filterkriterien zusammenclicken.
Dazu benutze ich folgenden Code:
Sub HoleGefilterte()
Dim saFilter(9999) As String
Dim iFilter As Integer
For iFilter = 0 To Me.ListBox_Filter.ListCount - 1
If Me.ListBox_Filter.Selected(iFilter) Then
saFilter(iFilter) = Me.ListBox_Filter.List(iFilter)
End If
Next iFilter
Sheet2.Range("$A$1:$B$1").AutoFilter Field:=2, Criteria1:=Array(saFilter), Operator:= _
xlFilterValues
End Sub

Das Problem ist, wenn ich "Fisch" und "Fleisch" anwähle findet der Filter im Beispiel nur Zeile 2 und Zeile 9, aber nicht die kombinierten Einträge.
Den Suchstring wie in der Makrovorlage um Sterne zu erweitern
saFilter(iFilter) = "*" & Me.ListBox_Filter.List(iFilter) & "*"
habe ich probiert, dann findet er zwar kombinierte Einträge, aber nur für die erste Listboxauswahl.
Den Zusatz
, Operator:=xlOr, Criteria2:=
des Makrorekorders möchte ich nicht benutzen müssen, da ich statt zwei auch drei oder dreihundert Kriterien zulassen möchte.
Wie überzeuge ich den Autofilter, das zu machen was ich möchte?
(Nebenschauplatz: ich hab das Array saFilter auf 9999 dimensioniert, damit es auf jedem Fall reicht. Kann ich das auch dynamisch auf die benötigte Länge dimensionieren?)
Grüße,
Klaus M.vdT.
Ein schnelles "geht nicht" als Antwort würd mir schon reichen ... dann muss ich das mit Zeilenweisem ausblenden machen und auf den schnellen Autofilter verzichten. Aber es währ schon klasse, wenn ich den Code so zum laufen bekomme ..

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilter per VBA mit "contains" aus Array
12.02.2013 13:32:32
Beverly
Hi Klaus,
der Autofilter in Excel2010 funktioniert für 1 und 2 Filterkriterien genau so wie in den Versionen bis Excel2003, für mehr als 2 Filterkriterien wird dann das Array vewendet - folglich musst du deinen Filter auch in Abhängigkeit von der Anzahl an Filterkriterien unterschiedlich handhaben.
Ein Array kann man in Abhängigkeit von neu hinzukommenden Werten dynamisch gestalten, indem man Redim Preserve anwendet.


AW: Autofilter per VBA mit "contains" aus Array
12.02.2013 14:00:32
Klaus
Hallo Beverly,
danke schonmal - aber es bringt mich noch nicht weiter.
Kannst du mir ein Beispiel posten, in dem ein Autofilter nach 3 verschiedenen "OR contains" sucht? Rekordern kann ich diesen Vorgang schonmal leider nicht ..
wg Redim, es wäre dann:
Redim Preserve saFilter(Me.ListBox_Filter.ListCount - 1)
oder wie?
Grüße,
Klaus M.vdT.

Anzeige
Preserve ist nur erforderlich, ...
12.02.2013 14:08:19
Luc:-?
…Klaus,
wenn der bisherige Inhalt der Variablen erhalten bleiben soll, aber es entweder weniger Elemente wdn sollen oder weitere hinzuzufügen sind. Bei mehrdimensionalen Datenfeldern wirkt das übrigens stets nur auf die letzte Dimension.
Gruß Luc :-?

AW: Autofilter per VBA mit "contains" aus Array
12.02.2013 14:17:11
Beverly
Hi Klaus,
VBA hat auch eine Hilfe... ;-)
Nach diesem Prinzip kann man ein Array in Abhängigkeit dynamisch erweitern:
Sub ArrayErweitern()
Dim arrWerte()
Dim lngZaehler As Long
Dim lngZeile As Long
lngZaehler = 1
For lngZeile = 1 To 20
If Cells(lngZeile, 1)  "" Then
ReDim Preserve arrWerte(1 To lngZaehler)
arrWerte(lngZaehler) = Cells(lngZeile, 1)
lngZaehler = lngZaehler + 1
End If
Next lngZeile
End Sub


Anzeige
Danke sehr! Und der Autofilter?
12.02.2013 14:20:36
Klaus
Hallo Beverly und Luc,
danke sehr, dass mit den Arrays-Redim werde ich nochmal verinnerlichen und austesten.
Kann ich denn den 2010er Autofilter mit einem Array und der OR-Bedingung füttern oder geht das nicht?
Grüße,
Klaus M.vdT.

AW: Danke sehr! Und der Autofilter?
12.02.2013 14:38:53
Beverly
Hi Klaus,
ich bin mir nicht sicher, würde aber vermuten, dass das nicht mithilfe des Arrays geht, denn du müsstest ja benutzerdefiniert filtern - und das geht (meines Wissens nach) eben nur mit 2 Kriterien. Du müsstest dann halt in einer Schleife über alle Zellen laufen und den Inhalt prüfen.
Ich lasse die Frage aber mal offen.


Anzeige
AW: Danke sehr!
12.02.2013 14:46:21
Klaus
Du müsstest dann halt in einer Schleife über alle Zellen laufen und den Inhalt prüfen.
Mach ich dann so. Danke für die Hilfe.
Grüße,
Klaus M.vdT.

zu. owt
12.02.2013 14:46:45
Klaus
.

AW: Fall für Spezialfilter
12.02.2013 21:25:38
Gerd
Hallo Klaus,
den der akzeptiert im Kriterienbereich * *
Gruß Gerd

AW: Fall für Spezialfilter
13.02.2013 08:52:08
Klaus
Hallo Gerd,
danke für den Ansatz! Den Spezialfilter habe ich bisher nur für "keine Duplikate" genutzt und hatte den gar nicht auf dem Zettel.
Leider bekomme ich den nur mit der UND Logik zum laufen, ich brauche aber die ODER Logik...
1 Artikel
2 Obst
3 Fleisch
4 Aufschnitt Fleisch
5 Gemüse
6 Aufschnitt Fisch
7 Fisch Konserve
8 Gemüse
9 Fisch
In dieser Liste findet der Spezialfilter mit den Kriterien
1 Artikel
2 ="=*Fleisch*Fisch*"

leider gar nichts (soll finden:3,4,6,7,9). Das Kriterium ="=*Fleisch*" findet 3 und 4, das Kriterium ="=*Fisch*" findet 6,7,9.
Wenn ich damit nur nach einem Kriterium suchen kann, kann ich auch gleich den Autofilter mit "contains" verwenden.
Hast du noch eine Idee, wie ich den Spezialfilter auf "ODER" umschalten kann? Vielleicht mit einer "FINDEN"-Matrixformel als Kriterium?
Grüße,
Klaus M.vdT.
Anzeige

108 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige