FILTERN-Funktion wird nicht aktualisiert

Guten Abend,

dies ist mein erster Beitrag in dem Forum und ich freue mich, dass es diese Plattform gibt!

Zu meiner Frage:

Meine FILTERN-Funktion greift im selben Blatt auf eine Matrix ein paar Spalten links daneben zu
=FILTERN(B2:E2000;B2:B2000>=HEUTE())
[B ist sicher als Zahl bzw. Datum festgelegt, das Datum wird als Integer angezeigt]

Selbstverständlich liefert sie korrekte Ergebnisse bei der ersten “Einrichtung”
Auch, wenn ich im Bereich B2:E2000 bestehende Einträge korrigiere, wird der Filter korrekt umgesetzt.
Allerdings erfolgt keine korrekte Ausgabe, wenn ich im Bereich B2:E2000 unterhalb bis dahin bestehender Einträge

  • einen Eintrag lösche
  • einen neuen Eintrag hinzufüge

Die automatische Berechnung der Daten ist aktiviert.

Leider komme ich nicht weiter…

Vielen Dank für Lösungsvorschläge!
Tobias

Der allerneueste Excel-Scheiß wurde zwar nachgebildet, aber Calc ist noch nicht in der Lage, Matrixformeln zu expandieren oder zusammenzuziehen, wenn sich die Größe des berechneten Datensatzes ändert. 3 Möglichkeiten:

  • Man könnte es genau so machen wie mit Excel von 1990 bis 2024, indem man einfach die Liste filtert.
  • Man könnte ein Makro verwenden, das alle Matrixformeln erneuert.
  • Man könnte professionell werden und komplett von Tabellenkalkulation auf Datenbank umsteigen. Da ist das alles (und noch viel mehr) triviale Selbstverständlichkeit.
from com.sun.star.beans import PropertyValue as pv

def resize_FormulaArrays(*_):
    doc = XSCRIPTCONTEXT.getDocument()

    frame = doc.CurrentController.Frame
    disp = XSCRIPTCONTEXT.ctx.ServiceManager.createInstance("com.sun.star.frame.DispatchHelper")
    sheet = doc.CurrentController.ActiveSheet
    ranges = sheet.queryContentCells(16) #all Formula[range]

    for single in ranges:
        if (formula:=single.ArrayFormula): # is there a ArrayFormula?        
            single.clearContents(16) # clear
            arg = pv( Name="ToPoint", Value= single[0,0].AbsoluteName)
            disp.executeDispatch(frame, ".uno:GoToCell", "", 0, (arg,))
            arg = pv( Name="Formula", Value = formula[1:-1] )
            disp.executeDispatch(frame, ".uno:InsertMatrix", "", 0, (arg,))  

Vielen Dank für die Antworten!

Das einfache Filtern der Liste wäre mir an sich recht… Nur dachte ich, genau das mit der Funktion FILTERN zu erreichen?
Bei einem Macro hängt immer die Sorge der Perfomance drüber…
Und tatsächlich wäre mir die Datenbanklösung am liebsten, allerdings ist mein überschaubares Tabellenprojekt schon hinreichend fortgeschritten und ich brauche den Filter nur noch für den Feinschliff :-))

Viele Grüße
Tobias

Nö. Du hast eine Liste, sagen wir Tabelle1.A1:F99, und eine Matrixformel, die Du in Tabelle2.A1 eingibst, sagen wir mal =FILTER($Tabelle1.$A$1:$F$99;"Name";"Willy")' oder sowas. Sagen wir mal, es gibt 4 Zeilen wo der Name "Willy" ist, dann erstreckt sich die Matrixformel auf Tabelle2.A1:F4. Jetzt fügst Du 6 Datensätze (ja, wir reden eigentlich von einer Datenbank) zu Tabelle1.A1:F99 hinzu, indem Du Zeilen einfügst und mit Daten befüllst. Bei einem Datensatz ist der Name "Willy". Die Matrixformel verändert sich zu =FILTER($Tabelle1.$A$1:$F$105;“Name”;“Willy”)’. Die Referenz wird um 6 Zeilen von 99 auf 105 erweitert, und die Matrixformel müsste sich auf Tabelle2.A1:F5 ausdehnen, um 5 Zeilen mit “Willy” darzustellen. Letzteres passiert aber nicht. Du musst Matrixformel löschen und dann nochmal in die Zelle Tabelle2.A1 eingeben, damit das passiert. Der Code von @karolus sucht Matrixformeln auf dem aktiven Blatt, löscht sie und gibt sie neu ein.

Seit mehr als 30 Jahren gibt es in Tabellenkalkulationen Filtermethoden (keine Funktionen), die den Originalbereich, hier also Tabelle1.A1:F99 filtern, so dass alle Zeilen, wo Name nicht “Willy” ist, ausgeblendet werden.
Und dann gibt es Datenbanken, wo eine Tabelle wirklich eine Tabelle ist, mit einem Anfang und einem Ende ist und eben nicht ein Rechteck aus belegten Zellen in einem Ozean aus einer Milliarde Leerzellen. Die “Formeln” einer Datenbank liefern zuverlässig vollständige Datensätze.