Liebe Leute
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.
Versteht ihr, was ich meine?
Vielen lieben Dank für eure Hilfe.
Grüsse
mauritius05
Hallo,
aus dem Archiv:
Code:
Zeitraum:
Anfang = DateValue("1.1.2016 09:00")
Ende = DateValue("28.2.2016 15:20")
Range.autofilter 1, ">" & 1* Anfang, 1, "<" & 1*ende
mfg
PS: Ich öffne die Datei nicht, nur als xlsx.
Code:
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.
Könnt ihr mir helfen?
Hallo,
ein Nachbau des Codes, die Tabelle darf belibig größer werden, muss aber von Leerzeilen und -spalten umgeben sei.
mfg
Ich habs nun anders gelöst, stehe jetzt allerdings vor einem anderen Problem.
Und zwar möchte ich Teilergebnis und Zählenwenn kombinieren.
Ich filtere die Tabelle an diversen Spalten und möchte, dass es mir in F4 die jeweils Anzahl2 von "durchgeführt/effectué" in B15:B1000 ausgibt.
Also etwas im Sinne von
=TEILERGEBNIS(3;(ZÄHLENWENN(B14:B299;"durchgeführt/effectué")))
Kann mir jemand helfen?
Hallo Mauritius,
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?
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.
Hallo,
dann musst du natürlich Spalte B auch noch entsprechend filtern.
2023 | B |
14 | Status/ statut |
21 | durchgeführt/effectué |
22 | durchgeführt/effectué |
Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
2023 | E | F | G |
3 | Status/ statut | Anzahl/ nombre | % |
4 | durchgeführt/effectué | 2 | |
5 | | | |
Formeln der Tabelle |
Zelle | Formel | F4 | =TEILERGEBNIS(3;B15:B37) |
|
Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
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?!
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.