Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1700to1704
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

Filtern nach nicht anzuzeigenden Werten

Filtern nach nicht anzuzeigenden Werten
09.07.2019 16:46:00
Thomas
Hallo zusammen,
ich möchte per Makro (VBA) einen Filter auf die Spalte "D" setzen.
Ich weiß nicht, welche Werte in der Spalte "D" stehen, aber ich weiß,welche Werte NICHT angezeigt werden sollen.
Der Code für die Auswahl sieht ja so aus:
ActiveSheet.Range("$A$1:$AH$125").AutoFilter Field:=4, Criteria1:=Array( _
"101", "102", "105", "136", "300", "327", "328", "332", "384"), Operator:= _
xlFilterValues

Es können diese Werte drin stehen, aber manchmal auch andere oder es kommen noch welche hinzu. Die Werte "289" und "300" will ich definitiv NICHT anzeigen.
Wie bekomme ich das hin, da ich ja nicht weiß, nach was ich filtern soll?
Vielen Dank.
Thomas

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Filtern nach nicht anzuzeigenden Werten
09.07.2019 16:52:02
UweD
Hallo
wenn es nur die 2 sind , dann so?

ActiveSheet.Range("$A$1:$AH$125").AutoFilter Field:=4, Criteria1:="289", _
Operator:=xlAnd, Criteria2:="300"

AW: Filtern nach nicht anzuzeigenden Werten
09.07.2019 17:00:42
Thomas
Hallo UweD,
genial.
Wenn es mehr wären, dann einfach erweitern um einen weiteren Term?
Operator:=xlAnd, Criteria3:="310"

Vielen Dank.
Thomas
AW: Filtern nach nicht anzuzeigenden Werten
09.07.2019 22:07:57
Thomas
Hallo UweD,
leider zu früh gefreut.
Das funktioniert nicht:
ActiveSheet.Range("$A$1:$AH$125").AutoFilter Field:=4, Criteria1:="289", Operator:=xlAnd, Criteria2:="300"

Der Filter wird praktisch nicht gesetzt. Wenn ich den Filter öffne (aufklappe), dann sind alle Felder deaktiviert.
Fehlt da was oder mache ich etwas falsch?
Danke.
Thomas
Anzeige
AW: Filtern nach nicht anzuzeigenden Werten
09.07.2019 17:32:00
Daniel
Hi
Das Array für FilterValues muss alle Werte, die angezeigt werden sollen, als vollständigen Text enthalten.
Es gibt hier keine Möglichkeit mit Bedingungen oder Jokern zu arbeiten.
Am besten liest du die Werte aus der Filterspalte in ein Array ein.
Dann erstellst du ein eindimensionales Array gleicher Größe und überträgst die Werte aus dem 2-D- Array mit einer Schleife, wobei du die unerwünschten auslässt.
Gruß Daniel
AW: Filtern nach nicht anzuzeigenden Werten
09.07.2019 22:15:02
Thomas
Hallo Daniel,
vielen Dank für Deine Antwort.
Grundsätzlich verstehe ich, was Du meinst. Aber in der Spalte, die ich filtern will, stehen die Werte i. d. Regel mehrfach drin. Wenn ich diese Werte abfrage, dann bekomme ich eine ellenlange Liste mit u. U. duzenden Wiederholungen.
Wenn es mit den ""-Bedingungen nicht geht, dann dachte ich event. an eine Pivot-Tabelle, deren Werte ich dann auslese. Aber das scheint mir mit der rechten Hand ins linke Ohr geschossen.
Gibt es da nicht etwas eleganteres?
Danke.
Thomas
Anzeige
AW: Filtern nach nicht anzuzeigenden Werten
09.07.2019 22:50:21
Daniel
Hi
im Prinzip richtig was du sagst, aber die Mehrfach vorkommenden Werte in der List stören den Autofilter nicht.
Für dich in der Programmierung ist es am einfachsten, über die komplette Liste zu gehen und die unerwünschten Werte daraus zu löschen.
die Schleife musst du sowieso durchlaufen, weil du ein 1-D-Array brauchst, aber aus der Tabelle zunächst nur ein 2-D-Array extrahieren kannst.
Wenn du eine Duplikatfreie liste haben willst, musst du die ja auch erstmal erstellen.
Ob VBA in deiner Excelversion dafür vorgefertigte Befehle hat, weiß ich nicht. in denen, die ich habe, nicht.
Insofern ist die von mir beschriebene Schleife über die Komplettliste schon das eleganteste, was du mit VBA schreiben kannst.
Gruß Daniel
Anzeige
AW: Filtern nach nicht anzuzeigenden Werten
09.07.2019 23:11:37
Daniel
ums nochmal konkret zu zeigen:
bei nur zwei verbotenen Werten kannst du ja die vorhandenen 2 Kriterien des Autofilters nutzen:
.AutoFilter Field:=4, Criteria1:="289",Operator:=xlAnd, Criteria2:="300"
sollten es mehr als 2 verbotene Werte sein, nach diesem Schema, wobei die auszubelenden Werte bei Instring im ersten Parameter aufzulisten sind:
Dim Wert
Dim Liste As String
With Range("A1:AD125")
For Each Wert In .Columns(4).Value
If InStr("|289|300|", "|" & Wert & "|") = 0 Then Liste = Liste & "|" & Wert
Next
Liste = Mid(Liste, 2)
.AutoFilter Field:=4, Criteria1:=Split(Liste, "|"), Operator:=xlFilterValues
End With

(wobei sich jetzt die Frage stellt, wie das noch "eleganter gehen soll)
die dritte Variante wäre, dass du die auszublendenen Werte in einer abgetrennten Hilfsspalte auflistet, und die Tabelle um eine Spalte erweiterst und dort mit ZählenWenn prüfst, ob der Wert in Spalte D in der Hilfsspalte vorkommt und dann die Tabelle in dieser Spalte nach 0 filterst.
Gruß Daniel
Anzeige
AW: Filtern nach nicht anzuzeigenden Werten
09.07.2019 23:29:49
Daniel
ok es geht schon noch etwas kompakter
die Schleife über alle Werte der Tabelle kann man vermeiden, aber das Prinzip bleibt das gleiche:
Dim Liste As String
With Range("A1:AD125")
Liste = "|" & Join(WorksheetFunction.Transpose(.Columns(4).Value), "|") & "|"
Liste = Replace(Liste, "|289|", "|")
Liste = Replace(Liste, "|300|", "|")
.AutoFilter Field:=4, Criteria1:=Split(Liste, "|"), Operator:=xlFilterValues
End With

AW: Filtern nach nicht anzuzeigenden Werten
10.07.2019 21:38:39
Thomas
Hallo Daniel,
vielen Dank.
Die nun zweite (dritte) Lösung habe ich benutzt.
Da ist zwar noch irgendwas unklar, da durch das Replace der Wert nur einmal aus der 'Liste' durch "|" ersetzt wird.
Habe jetzt einfach eine Schleife um das Replace gebaut (For - Next) und die Anzahl soweit erhöht, dass sicher aller Werte ersetzt werden.
Nun klappt es einwandfrei.
Danke
Thomas
Anzeige
AW: Filtern nach nicht anzuzeigenden Werten
11.07.2019 15:17:25
Daniel
HI
ok, noch ein Denkfehler.
um die Schleife zu vermeiden, arbeite so:
    Liste = "|" & Join(WorksheetFunction.Transpose(.Columns(4).Value), "||") & "|"
Liste = Replace(Liste, "|289|", "")
Liste = Replace(Liste, "||", "|")

dh mit Doppeltem Trennzeichen und ersetze mit nichts.
ersetze dann das Doppelte Trennzeichen durch ein einfaches Trennzeichen, bevor du den Text wieder splittest.
gruß Daniel
AW: Filtern nach nicht anzuzeigenden Werten
09.07.2019 20:42:08
Günther
Moin,
Alternative: Power Query. Die nicht gewünschten Zeilen in eine Liste/Tabelle ind dann Kombinieren-Linker Anti-Join.
Gruß
Günther
Anzeige
AW: Filtern nach nicht anzuzeigenden Werten
09.07.2019 22:20:31
Thomas
Hallo Günther,
auch Dir vielen Dank für Deine Antwort.
Mit Power-Query habe ich zwar schon gearbeitet, aber nie innerhalb eines VBA-Codes.
Und mit den Begriffen "Linker Anti-Join" kann ich leider gar nichts anfangen.
Wie gefragt: Vielleicht gibt es da etwas eleganteres?
Danke.
Thomas
AW: Filtern nach nicht anzuzeigenden Werten
09.07.2019 22:31:15
Günther
OK, auf VBA habe ich (natürlich) verzichtet.
Und ich hatte das mit Power Query gemacht, weil ich das für die "eleganteste" Möglichkeit halte. - Beim Menüpunkt Kombinieren gibt es da so einige Möglichkeiten, aber einarbeiten solltest du dich schon selber... (Im Sinne "Hilfe zur Selbsthilfe") => http://www.excel-ist-sexy.de/datenvergleich-neu-fehlt-geaendert-xlsx/ könnte helfen.
Gruß
Günther
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige