7k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo VBA-Experten,

ich hoffe ihr könnt mir helfen:
Ich möchte via Makro einen Filter setzten, der insgesamt bis zu 15 verschiedenen Kriterien in der B-Spalte filtern soll.
Die Tabelle, welches gefiltert werden soll, beginnt in der Spalte B2 und endet in der Spalte J2.
Die Tabelle kann unterschiedlich lang sein, jedoch mindestens 500 Zeilen, maximal 6.000.
Alle Kriterien sind nur in der B-Spalte zu finden, sonst nirgends.
Ich habe folgendes ausprobiert, aber ohne Erfolg:

Range("B2:J2").AutoFilter Field:=1, Criteria1:="1144000002", Operator:=xlOr, Criteria2:="1144000008", Operator:=xlOr, Criteria3:=" 1533___154"

Die ersten zwei Kriterien bekomme ich hin (Makro macht was ich ihm sage), ab hinzufügen von:

, Operator:=xlOr, Criteria3:=" 1533___154"

Nicht mehr. Läuft auf Fehler.

Das heißt, wenn ich nur:

Range("B6:K6").AutoFilter Field:=1, Criteria1:="1144000002", Operator:=xlOr, Criteria2:="1144000008"

definiere, dann funktioniert.

Sehr WICHTUG:
Das Makro soll auch dann laufen, wenn einer/mehrere Begriffe nicht findet. Es kann also sein, dass die Tabelle nur 2 oder 3 Begriffe enthält.

Sollte irgendetwas unklar sein, dann einfach melden.

Freundliche Grüße
Max

9 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Max,

probier's mal so:

Option Explicit

Sub Filter()
Columns("A:J").AutoFilter
ActiveSheet.Range("$A$1:$J$6000").AutoFilter Field:=2, Criteria1:=Array("K1" _
, "K2", "K3", "K4", "K5"), Operator:=xlFilterValues
End Sub


K1 -K5 musst du durch die tatsächlichen Namen der Kriterien ersetzen.

Gruß
Rainer
0 Punkte
Beantwortet von
Hallo Rainer,

Danke Dir.

Das Problem wurde (fast) gelöst.

So wie Du ihm geschrieben hast funktioniert aber nur wenn ich
Option Explicit
(Es ist nun so, dass ich über Button den Makro starte)

entferne und es filtert ab Zeile 1. Es hat schon seinen Grund, warum ab Zeile 2 (Spalte B) gefiltert werden soll.

Hast Du hier eine Lösung?

Wie auch immer, Du hast mir schon jetzt weitergeholfen.

Gruß,
Max
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Max,

bei mir funktioniert es so:

Option Explicit

Sub Filter()
Worksheets("Tabelle1").Columns("A:J").AutoFilter
ActiveSheet.Range("$A$2:$J$543").AutoFilter Field:=2, Criteria1:=Array("K1" _
, "K2", "K3", "K4", "K5"), Operator:=xlFilterValues
End Sub


Der Code befindet sich in einem allgemeinen Modul und die Befehlsschaltfläche auf dem relevanten Arbeitsblatt.
Evtl. Tabellennamen anpassen!!

Option Explicit
brauchst du nicht löschen.

Gruß
Rainer
0 Punkte
Beantwortet von
Hi Rainer,

es funktioniert jetzt einfach "Perfekt".
Vielen lieben Dank.

Vielleicht noch etwas, falls es geht:

Kann man anstatt der Variablen genau zu definieren (K2, K3 etc.) auch sagen, es muss alles filtern, was mit
2520, 2769 und 8560
beginnt?

Gruß,
Max
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Max,

das geht mit einer Hilfsspalte z.B Spalte K

Schreibe in K2 folgende Formel und ziehe sie nach Bedarf nach unten.

=LINKS(B2;4)

Der angepasste Code sieht dann so aus,
Option Explicit

Sub Filter()
Worksheets("Tabelle1").Columns("A:K").AutoFilter
ActiveSheet.Range("$A$2:$K$543").AutoFilter Field:=11, Criteria1:=Array("2520", _
"2769", "8560"), Operator:=xlFilterValues
End Sub

Gruß
Rainer
0 Punkte
Beantwortet von
Hallo Rainer,
Danke für Deine Hilfe.
Auf diese Lösung bin ich auch vorher gekommen. Ich müsste dann 6000 Zeilen mit der von Dir vorgeschlagenen Excel-Formel befüllen.
Die Datei würde dann zu groß werden.
Kann man diese Formel direkt (irgendwie) im Quelltext einbauen?
Wie auch immer. So bin ich sehr glücklich.
Danke im Voraus
Gruß,
Max
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Max,

da unterliegst du einem Irrtum.

Die Datei mit 6000 Zeilen ohne meine Hilfsspalte belegt auf dem Datenträger 364 KB.

Mit Hilfsspalte und den entsprechenden Formeln werden lediglich 388 KB belegt, das ist doch ein Klacks, oder...?

Kann dir keine andere Lösung bieten.

Gruß
Rainer
0 Punkte
Beantwortet von vso Mitglied (237 Punkte)
Moin Rainer,

die Formel dafür lautet Left(Zelle,Anzahl Zeichen).
Wenn in B3 der Wert "Formel" steht, liefert Left(B3, 4) als Ergebnis "Form" zurück.

Du musst also zunächst ermitteln, wieviele Zeilen gefüllt sind, dann die entsprechenden Zellen einer Hilfsspalte mit den Werten füllen und dann kannst Du wie von Dir gewünscht filtern.

Viel Erfolg,

Volker
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Max,

wenn ich Volker richtig verstehe, meint er es so:
Option Explicit

Sub Filter()
Dim rngC As Range
For Each rngC In Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row)
rngC.Offset(0, 9).Value = Left(rngC, 4)
Next
Worksheets("Tabelle1").Columns("A:K").AutoFilter
ActiveSheet.Range("$A$2:$K$543").AutoFilter Field:=11, Criteria1:=Array("2520", _
"2769", "8560"), Operator:=xlFilterValues
End Sub


Damit werden mit der gleichen Testdatei 368 KB belegt, also auch nicht merklich weniger als mit Formeln.

Entscheide nun selbst, wie du es lösen willst.

Gruß
Rainer
...