Registriert seit: 11.04.2014
Version(en): 365
Hallo,
ich haben folgenden Code für einen Autofilter.
1. Wie kann ich die Kriterien im Array aus einer Liste in einem Tabellenblatt auslesen. Die Liste verändert sich immer wieder.
Die Liste hat auch einen Bereichsnamen wo der Bereich an die Größe der Liste angepasst wird (Formel mit Bereich.verschieben ....) = Namen
Code:
Range("B4").AutoFilter Field:=2, Criteria1:=Array( _
"Name1", "Name2", "Name3"), Operator:=xlFilterValues
2. Können die Kriterien mit "enthält" abgefragt werden?
LG Herbert
Windows 10
Office 365
Registriert seit: 05.09.2017
Version(en): 2013
Hallo Herbert,
für deinen Filterbereich hast du nur eine Zelle angegeben??
willst du wirklich nur die Spalte B filtern?
was verstehst du unter "können die Kriterien mit "enthält" abgefragt werden"?
Am besten lädst du mal eine Beispielmappe hier hoch.
Gruß Werner
Registriert seit: 11.04.2014
Version(en): 365
Hallo Werner,
die Liste geht über mehrere Spalten (A bis K), gefiltert wird nach Werten in der Spalte B.
Mit enthält meine ich, dass beim Filtern zB nach *Name* auch nach zB Vorname123 gefiltert wird.
Mit zwei Filterkriterien (Operator :=xlOr) geht das.
Ich habe bei meiner Suche gelesen, dass bei mehr als 3 Filterkritereien (Array) die Eingabe mit Stern nicht möglich ist, weil der Stern nicht als Platzhalter sondern als Zeichen interpretiert wird.
Gibt es eine andere Möglichkeit?
Wichtiger wäre mir der 1. Punkt. Wie bringe ich die Einträge einer Liste dynamisch in den Kriterien Array
LG Herbert
Windows 10
Office 365
Registriert seit: 05.09.2017
Version(en): 2013
Hallo Herbert,
ich würde, es geht ja wohl um Namen, Vorname und Nachname in verschiedene Spalten auftrennen und nicht beides in einer Spalte belassen.
Zur Aufnahme der Namen in ein Array und entsprechendem Filtern der Tabelle siehe beiliegenden Code. Den Code habe ich entsprechend kommentiert.
Keine Ahnung warum, aber ich bekomme im Moment die Musterdatei nicht hochgeladen.
Code:
Option Explicit
Public Sub Filterarray()
Dim loLetzte As Long, loLetzte1 As Long, i As Long, n As Long
Dim arFilter() As Variant
'ich bin von folgendem ausgegangen:
'Deine Namensliste befindet sich in Tabelle2
'Die Namen sind in Spalte A und beginnen ab Zeile 2
'die Namensliste ist lückenlos befüllt
With Worksheets("Tabelle2")
'ermitteln der letzten belegten Zelle in Spalte A
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
'Dimensionieren des Arrays
ReDim Preserve arFilter(loLetzte - 2)
'Schleife von Zeile 2 bis letzte belegte Zeile
For i = 2 To loLetzte
'Werte aus den Zellen ins Array schreiben
arFilter(n) = .Cells(i, 1)
'Zähler fürs Array hochzählen
n = n + 1
'nächste Zeile
Next i
End With
'ich bin von folgendem ausgegangen:
'die Daten die gefiltert werden sollen befinden sich in Tabelle1
'Filterbereich sind die Spalten A4 bis K letzte belegte Zeile
With Worksheets("Tabelle1")
'ermitteln der letzten belegten Zeile in Spalte A
loLetzte1 = .Cells(.Rows.Count, 1).End(xlUp).Row
'Filter von A bis K, Zeile 3
.Range("A3:K3").AutoFilter
'Filterbereich von A4 bis K letzte belegte Zeile, filtern nach Spalte B
.Range("$A$4:$K$" & loLetzte1).AutoFilter Field:=2, Criteria1:=arFilter, Operator:=xlFilterValues
End With
End Sub
Gruß Werner
Registriert seit: 11.04.2014
Version(en): 365
Hallo Werner,
Danke, funktioniert wunderbar.
LG Herbert
Windows 10
Office 365