Ich brauche wieder einmal eure Hilfe. Mit Google und ChatGPT krieg ichs nicht hin.
Ich habe ein Arbeitsblatt mit dem Namen "2023". In B3 schreibe ich ein "von-Datum" rein und in C3 ein "bis-Datum". Gemäss dieser Eingaben soll es mir dann die Tabelle A15:AA1000 filtern, wobei das Datum, nach welchem gefiltert werden soll, in L15:L1000 steht.
Wenn in B3 oder C3 nichts steht, soll der Filter rausgenommen werden und wenn in B3 oder in C3 ein neues Datum eingegeben wird, soll der Code erneut ausgeführt werden.
Private Sub Worksheet_Change(ByVal Target As Range) Dim fromDate As Date Dim toDate As Date Dim ws As Worksheet Dim rng As Range Dim cell As Range
' Überprüfen, ob die Änderung in den Zellen B3 oder C3 stattgefunden hat If Not Intersect(Target, Me.Range("B3, C3")) Is Nothing Then ' Arbeitsblatt und zu filternder Bereich auswählen Set ws = ThisWorkbook.Worksheets("2023") ' Ersetze "2023" durch den Namen deines Arbeitsblatts Set rng = ws.Range("L15:L1000") ' Ersetze "L15:L1000" durch den tatsächlichen Bereich, den du filtern möchtest
' Überprüfen, ob in B3 und C3 gültige Datumswerte vorhanden sind On Error Resume Next fromDate = DateSerial(Right(ws.Range("B3").Value, 4), Mid(ws.Range("B3").Value, 4, 2), Left(ws.Range("B3").Value, 2)) toDate = DateSerial(Right(ws.Range("C3").Value, 4), Mid(ws.Range("C3").Value, 4, 2), Left(ws.Range("C3").Value, 2)) On Error GoTo 0
' Filter ausschalten, wenn eines der Datumsfelder leer ist If ws.Range("B3").Value = "" Or ws.Range("C3").Value = "" Then ws.AutoFilterMode = False ElseIf IsDate(fromDate) And IsDate(toDate) Then ' Loop über alle Zellen in der Spalte L prüfen und ausblenden, wenn sie nicht dem Datumsbereich entsprechen For Each cell In rng If cell.Value < fromDate Or cell.Value > toDate Then cell.EntireRow.Hidden = True Else cell.EntireRow.Hidden = False End If Next cell Else ws.AutoFilterMode = False ' Filter ausschalten, wenn eines der Datumsfelder ungültig ist End If End If
Ich habe obenstehenden Code, der, so glaube ich jedenfalls, klappt. Allerdings möchte ich noch, dass... 1. nur die Zeilen in den Filter mit einbezogen werden, die in der Spalte L15:L1000 ein Datum stehen haben. Zurzeit filtert es bis L1000 raus. 2. wenn in B3 oder/und C3 nichts steht, soll der gesamte Filter wieder gelöscht werden und alle Zeilen sollen sichtbar sein. Zurzeit passiert dies nicht.
so ganz ohne Daten in deiner Beispieldatei lässt sich das nicht gut nachvollziehen. Teilergebnis mit der Funktion 3 liefert doch schon eine Anzahl, wozu dann noch Zählenwenn?
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
In Spalte L wird nach Jahr gefiltert und in B15:B1000 habe ich dann "durchgeführt/effectué" und "geplant/prévu" drin. Bei Teilergebnis zeigt es mir dann 5 an, obwohl es allerdings nur deren 2 wären.
Ja, das ist mir schon klar, dass man dies händisch machen kann. Es soll jedoch nur nach dem Jahr gefiltert werden müssen und der Rest soll es mir mit der Formel ausgeben.
Gemäss Google geht die Kombi Teilergebnis und Zählenwenn nicht. Daher suche ich eine andere Variante?!
27.06.2023, 18:15 (Dieser Beitrag wurde zuletzt bearbeitet: 27.06.2023, 18:17 von Klaus-Dieter.)
Hallo Mauritius,
der Sinn der Funktion Teilergebnis ist, dass er über alle Werte arbeitet, die nach dem Filtern noch sichtbar sind. Damit wirkt das sozusagen dynamisch. Die andere Möglichkeit wäre die Berechnung über Formeln. Da würde sich unter anderem die Funktion Summenprodukt anbieten =SUMMENPRODUKT((L15:L37=2022)*(B15:B37="durchgeführt/effectué")) Wobei die Formellösung dann eben nicht dynamisch ist, das heißt, sie zeigt unabhängig von der Filterung immer den gleichen Wert an.
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden