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, 17:15 (Dieser Beitrag wurde zuletzt bearbeitet: 27.06.2023, 17: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