Autofilter über mehrere Spalten verwenden, mittels Makro?

2 Antworten

Erstmal ein dickes Lob an dich, dass du dir die Mühe gemacht hast, den Makrorekorder zu betätigen!

Leider verknüpft Excel auf deine Art die Filter UND. Das bedeutet, es werden nur Zellen angezeigt, die in jeder der angegebenen Filterspalten den Wert aus C2 stehen hat.

Die erste Möglichkeit, die ich dir vorstellen möchte, ist der erweiterte Filter (Daten → Sortieren und Filtern → Erweitert)

Hier kannst du in einem gesonderten Bereich deine Filterkriterien dynamisch aufbauen (siehe Screenshot). Der VBA-Code hierfür lautet:

Range("A13:K45").AdvancedFilter Action:= _ 
  xlFilterInPlace, CriteriaRange:= _
  Range("N1:X4"), Unique:=False

Eine weitere Möglichkeit ist, in Spalte L die Spalten B, C und D zu verketten. =B14&C14&D14 und darauf den Filter "*" & Cells(2,3).Value & "*" anzuwenden.

PS: Du kannst eine ungenaue Suche durchführen, indem du Sternchen verwendest: Criteria1:="*" & Cells(2,3).Value & "*"

Erweierten Filter für Oder-Verknüpfung verwenden - (Excel, makro)

Mit dem Autofilter allein funktioniert das nicht, sobald die erste Spalte gefiltert ist, sind alle Einträge außer dem Suchbegriff weg, damit findet der Autofilter die Einträge in den anderen Spalten nicht mehr.

Du brauchst also eine Hilfsspalte dazu: Dort mit normaler Formel =ZÄHLENWENN(A1:F1;"Suchbegriff") hinterlegen.
Autofilter dann in der Hilfsspalte auf die Werte größer 0, das geht dann auch mit dem Makro

Wenn nicht nur der exakte Suchbegriff gefunden werden soll, dann mit * arbeiten.

Wenn Du direkt in VBA die Zeilen ausblenden willst (ohne Autofilter und HIlfsspalte) :

Sub tt()
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 'das ermittelt die letzte Zeile in Spalte A, d.h. das sollte die spalte sein die immer gefüllt ist
If WorksheetFunction.CountIf(Range(Cells(i, 2), Cells(i, 5)), "Such*") = 0 Then Rows(i).Hidden = True
Next
End Sub

das rückwärtszählen in der For-Schleife könnte man sich beim ausblenden sparen, wird so nur beim löschen benötigt, da durch die gelöschten Zeilen sonst das hochzählen nicht funktioniert. d.h. geht auch for i=1 to ...

Excel 2013: Wie erstellt man ein Makro für auswahlbasierten Filter (nach dem Wert der ausgewählten Zelle filtern)?

Hallo,

ich habe eine Datenbank mit Namen und Adressen und muss sehr sehr oft nach dem Nachnamen filtern. Da mir der Weg über rechte Maustaste >Filter >nach dem Wert der ausgewählten Zelle filtern zu lang war, wollte ich ein Makro machen. Ich habe eine Zelle ausgewählt (in diesem Fall den Nachnamen "Meier") und das Makro erstellt. Soweit so gut.

Aber wenn ich jetzt das Makro ausführe, filtert es nicht nach der ausgewählten Zelle sondern immer nach "Meier".

Ich habe auch schon Tante Goo... gefragt, bin aber nicht fündig geworden.

Leider kenne ich mich mit Excel nicht so gut aus, mit VB etc. weiß ich nicht viel anzufangen.

Über eine hilfreiche Antwort würde ich mich sehr freuen.

...zur Frage

Wie kann ich in Excel 2007 mehrere Werte in einer Zelle auswählen?

Ich möchte in Excel 2007 eine Liste erstellen, die quasi wie eine kleine Datenbank funktionieren soll.

Um darin schneller filtern zu können, habe ich für Spalten E - G auch bereits Drop-down-Menüs erstellt, um die Eingabe auf die vorgegebenen Werte zu beschränken. In den Spalten E und F ist auch immer nur 1 Wert möglich. In der Spalte G jedoch müssten mehrere Daten eingegeben werden können. Am liebsten wäre es mir, wenn man in der Drop-down-Liste mehrere Werte per Häkchen auswählen könnte. Ähnlich wie beim Autofilter.

Gibt es da eine Möglichkeit dies in Excel zu realisieren?

...zur Frage

Excel Tabelle mit VBA fortlaufend befüllen?

Hallo,

ich habe eine ziemlich schwierige Aufgabe zu lösen, zumindest für mich als VBA Amateur und bräuchte deswegen eure Hilfe, da ich daran schon seit Tagen verzweifle.

Die Aufgabenstellung ist folgende:

Es soll durch ein Kontrollfenster (1. Bild links) möglich sein, einen neuen Datensatz anzulegen, der dann automatisch in der Tabelle (1. Bild rechts) davon erscheint. Die Erstellung der Datensätze soll fortlaufend geschehen, d.h. falls bereits ein Datensatz in Zeile 4 vorliegt, dass der neue Datensatz automatisch in Zeile 5 (usw.) angelegt wird. Zuletzt soll dann das Kontrollfenster geleert werden, sodass es theoretisch möglich wäre, direkt einen weiteren Datensatz anzulegen.

Weiterhin soll dieser neu angelegte Datensatz mit dem "DiagrammA" im Reiter "Diagramm" verknüpft werden (X/Y-Werte und Name in der Legende), sodass dort auch automatisch dieser Datensatz erscheint (2. & 3. Bild).

(Optional): Die Möglichkeit zum Entfernen eines Datensatzes.

Vielen Dank!

...zur Frage

VBA mehrere Werte aus Spalte filtern?

Hallo, ich habe eine Datei mit sehr vielen Spalten. Ich will das Problem erstmal an einer Spalte erklären, auf mehrere übertragen kann ich dann machen.

Ich habe ich Spalte B viele Zahlen, immer von unterschiedlicher länge. Mein Code zur Erfassung sieht so aus:

lSpalte = Cells(3, Columns.Count).End(xlToLeft).Column

For i = 2 To lSpalte Step 5

lZeile = Cells(Rows.Count, i).End(xlUp).Row

Range(Cells(3, i), Cells(lZeile, i)).Select

Ab der 3. Zeile und 2. Spalte fangen die Zahlenwerte an, sind n Zeilen lang. Die Spalte wiederholt sich mit anderen Werten immer alle 5 Spalten.

Jetzt mein Problem. Ich würde gerne z.B. aus der Liste alle Werte herausfiltern, die kleiner 0,01. Diesen Wert + den Wert, der links davon steht würde ich gerne kopieren und in ein anderen Reiter kopieren.

Ich freue mich über Lösungsvorschläge

...zur Frage

VBA Excel Leerzeile in Spalte einfügen,wenn Werte ungleich - bis zur ersten LZ

Guten Tag, programmiere zum ersten mal ein Makro, und komme nicht mehr weiter. Ich möchte in Spalte C die Werte vergleichen, und sobald der Wert ungleich ist,soll eine Leerzeile eingefügt werden. Mit diesem Code klappt das super:

Sub Makro12() 'fügt Leerzeilen zwischen verschiedenen Lagerorten ein (Spalte C)

Dim r As Long, mcol As String, i As Long

r = Cells(Rows.Count, "C").End(xlUp).Row

mcol = Cells(r, 3).Value

For i = r To 2 Step -1 If Cells(i, 3).Value <> mcol Then mcol = Cells(i, 3).Value Rows(i + 1).Insert End If Next i End Sub

Das Problem: Ich möchte nicht dass er alle Werte vergleicht,sondern nur die Werte bis zur ersten leeren Zelle. Einfach aufzeichnen geht nicht,da die Tabellenlänge variiert. Wäre für Antworten sehr dankbar Viele Grüße

...zur Frage

Macro VBA Code Wenn Dann auf mehrere Zellen?

Hallo zusammen,

komme nicht mehr weiter :( Brauche einen VBA Code der wie folgt aussehen soll

in Spalte A1-A1000 sind Zahlenwerte eingetragen im Bereich von 0,01 - 500. Nun soll B1-B1000 eine automatische Berechnung stattfinden die wie folgt ausschauen soll. Zahl in Spalte A 0,00 - 0,10000 dann in Spalte B mal 1,25 0,10 - 0,29999 dann in Spalte B mal 1,10 0,30 - 0,39999 dann in Spalte B mal 1,09 0,40 - 0,49999 dann in Spalte B mal 1,08 0,50 - 0,69999 dann * 1,07 0,70 - 0,99999 dann * 1,06 1,00 - 1,49999 dann *1,05 1,50 - 1,99999 dann * 1,04 2,00 - 5,99999 dann * 1,03 6,00 - 9,99999 dann * 1,02 10,00 - 500,00 dann *1,01

Habe schon folgenden Code wo funktioniert aber leider nur für eine Zelle:

Sub Aufschlag()

If Cells(1, 1).Value < 0.099999 And Cells(1, 1).Value > 0 Then Cells(1, 2) = Cells(1, 1) * 1.25

If Cells(1, 1).Value > 0.1 And Cells(1, 1).Value < 0.29999999 Then Cells(1, 2) = Cells(1, 1) * 1.1

If Cells(1, 1).Value > 0.29999999 And Cells(1, 1).Value < 0.39999999 Then Cells(1, 2) = Cells(1, 1) * 1.09

If Cells(1, 1).Value > 0.39999999 And Cells(1, 1).Value < 0.49999999 Then Cells(1, 2) = Cells(1, 1) * 1.08

If Cells(1, 1).Value > 0.49999999 And Cells(1, 1).Value < 0.69999999 Then Cells(1, 2) = Cells(1, 1) * 1.07

If Cells(1, 1).Value > 0.69999999 And Cells(1, 1).Value < 0.99999999 Then Cells(1, 2) = Cells(1, 1) * 1.06

If Cells(1, 1).Value > 0.99999999 And Cells(1, 1).Value < 1.49999999 Then Cells(1, 2) = Cells(1, 1) * 1.05

If Cells(1, 1).Value > 1.49999999 And Cells(1, 1).Value < 1.99999999 Then Cells(1, 2) = Cells(1, 1) * 1.04

If Cells(1, 1).Value > 1.99999999 And Cells(1, 1).Value < 5.99999999 Then Cells(1, 2) = Cells(1, 1) * 1.03

If Cells(1, 1).Value > 5.99999999 And Cells(1, 1).Value < 9.99999999 Then Cells(1, 2) = Cells(1, 1) * 1.02

If Cells(1, 1).Value > 9.99999999 And Cells(1, 1).Value < 500 Then Cells(1, 2) = Cells(1, 1) * 1.01

End Sub

kann mir hier wer helfen?

Danke

...zur Frage

Was möchtest Du wissen?