Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Filtern gemäss Daten in Zellen
#1
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


Angehängte Dateien
.xlsm   test.xlsm (Größe: 22,89 KB / Downloads: 8)
Antworten Top
#2
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.
Antworten Top
#3
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?
Antworten Top
#4
Hallo,

ein Nachbau des Codes, die Tabelle darf belibig größer werden, muss aber von Leerzeilen und -spalten umgeben sei.

mfg


Angehängte Dateien
.xlsm   Mauri.xlsm (Größe: 14,66 KB / Downloads: 3)
Antworten Top
#5
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?
Antworten Top
#6
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?
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#7
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.


Angehängte Dateien
.xlsm   test.xlsm (Größe: 22,98 KB / Downloads: 4)
Antworten Top
#8
Hallo,

dann musst du natürlich Spalte B auch noch entsprechend filtern.

2023

B
14Status/
statut
21durchgeführt/effectué
22durchgeführt/effectué

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8

2023

EFG
3Status/
statut
Anzahl/
nombre
%
4durchgeführt/effectué2
5
Formeln der Tabelle
ZelleFormel
F4=TEILERGEBNIS(3;B15:B37)

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#9
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?!
Antworten Top
#10
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste