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 ...

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

Wie kann ich in VBA-Excel einen Filter setzen über einer CheckBox?

Hi,

ich suche eine einfachere Lösung für meine UserForm um über CheckBoxen meine Tabelle zu Filtern.

Im grunde möchte ich also, wenn ich einen Wert ankreuze soll dieser Gefiltert werden.

Wie im Beispiel (unten):

FKEP und KKEP angekreuzt = FKEP und KKEP angezeigt.

Nur KKEP angekreuzt = nur KKEP angezeigt

"Wert" der gefiltert werden soll | CheckBox Name
 FKEP                              CBFilterFKEP
 KKEP                              CBFilterKKEP
 KfB                               CBFilterKfB
 ausgesch.                         CBFilterausgesch
 beendet                           CBFilterbeendet
 EQ - KfB                          CBFilterEQKfB
 EQ - FKEP                         CBFilterEQFKEP

Mein momentaner Code schaut wiefolgt aus:

    Private Sub CBFilterFKEP_Click()

If CBFilterFKEP = True Then

    Sheets("Gesamtdaten").Range("$A$2:$EQ$502").AutoFilter Field:=3, Criteria1:=Array( _
    "FKEP"), Operator:=xlFilterValues

If CBFilterKKEP = True Then

    Sheets("Gesamtdaten").Range("$A$2:$EQ$502").AutoFilter Field:=3, Criteria1:=Array( _
    "FKEP", "KKEP"), Operator:=xlFilterValues

End If
End If
End Sub

Private Sub CBFilterKKEP_Click()

    If CBFilterKKEP = True Then

        Sheets("Gesamtdaten").Range("$A$2:$EQ$502").AutoFilter Field:=3, Criteria1:=Array( _
        "KKEP"), Operator:=xlFilterValues

    If CBFilterFKEP = True Then

        Sheets("Gesamtdaten").Range("$A$2:$EQ$502").AutoFilter Field:=3, Criteria1:=Array( _
        "KKEP", "FKEP"), Operator:=xlFilterValues

    End If
    End If
    End Sub

Soweit so gut ... nun habe ich aber nur FKEP und KKEP "abgestimmt" ... muss ich nun alle 5 Werte auch "abstimmen" ? Das wird nämlich ein SEHR langer code ... und ich könnte wetten das es in VBA viel leichter geht ...

Hat wer eine Idee von euch?

MfG Tim

...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?