EXCEL Zellen zählen mit Datum und leere Zellen ignorieren

Hallo,

ich habe eine Liste mit unter anderem einer Spalte mit Daten. Ich benötige eine Formel, die mir die Zellen auf dem Reiter ‚Lieferantenliste BSCI Status‘ zählt, in denen das Datum in der Zukunft liegt.

Die Formel :

=ZÄHLENWENN(‚Lieferantenliste BSCI Status‘!D2:D224;">HEUTE()")

zählt auch die leeren Datumszellen ohne Eintrag als Datum in der Zukunft. Wie kann ich das ändern?

Danke schon einmal !

Beste Grüße
Flo

hi,

zählenwenns() kann mehrere Bedingungen, also auch zusätzlich 'Lieferantenliste BSCI Status'!D2:D224;">0"

grüße
lipi

1 Like

Hallo,

rein vom drüberlesen würde ich eigentlich denken dass das Suchkriterium falsch geschrieben ist. Es ist schon richtig dass man die Anführungszeichen für das Größer-Zeichen benötigt und mit einer fixen Zahl würde es vermutlich so funktionieren wie es da steht, wenn man aber eine Funktion in die Anführungszeichen setzt, wird diese nicht ausgeführt, sondern als Text behandelt. Demnach sollte die Formel nur Zellen zählen die den Text >HEUTE() enthalten. Wenn die Liste mit den Daten korrekt ist, sollte die Formel also eigentlich immer 0 ausgeben und gar nicht zu dem geschilderten Problem führen können. Ändere die Formel mal zu:

=ZÄHLENWENN(‚Lieferantenliste BSCI Status‘!D2:D224;">"&HEUTE())

Gruß
Tobias

Gerade mal ausprobiert und ich muss mich leicht korrigieren. Das Größer-Zeichen wird beim Vergleich natürlich beachtet. Bei der Originalformel wird also geprüft ob der Zelleninhalt größer ist als der Text HEUTE(). Da beim Größenvergleich Zahlen kleiner sind als Buchstaben, ich vermute das geht einfach nach der Position in der ASCII-Tabelle, sind Buchstaben größer als jede Zahl, was in diesem Fall aber auch nur zum Ergebnis 0 führen sollte.

Du vermutest falsch. Excel ist keine Programmiersprache. Du kannst nicht die gleichen syntaktischen Grundregeln anwenden, zumal eine Daten-Konvertietung nach TEXT deutlich mehr Probleme als die Beschriebenen verursachen würde. Aus Sicht eines Programmierers geht Excel sehr oft unlogisch vor. In diesem Fall wird die EVAL-Funktion verwendet (https://docs.microsoft.com/en-us/office/vba/api/Excel.Application.Evaluate)

Bei der Frage geht es (nur) um leere Fehler. „Leer“ ist kein Wert, sondern ein Zustand. Für einen Zustand muss separat bestimmt werden, wie damit umgegangen werden soll.

Der Vorschlag von @littlepinguin ließt sich da gut, solange kein Datum vor dem 1900-01-01 angegriffen werden muss. Aber das ist ja im hier vorliegenden Fall gegeben.

Dann korrigiere mich bitte. Ich gehe davon aus dass dafür die ASCII-Tabelle verwendet wird, da diese auch. für die Zeichen-Funktion verwendet wird und die Reihenfolge mit meinen Tests exakt übereinstimmt. Leider scheint sich dein restlicher Beitrag nicht mehr darauf zu beziehen aber ich würde mich wirklich sehr über nähere Informationen freuen .

Von der Syntax ist Excel einer stark eingeschränkten Programmiersprache gar nicht so unähnlich. Ich rede aber nicht von einer Datenkonvertierung und natürlich entspricht alles der Syntax von Excel.
Innerhalb von Excel-Formeln wird Text in Anführungszeichen geschrieben, ansonsten geht Excel von einer Zahl oder einem Namen, der für einen Bereich oder eine Funktion steht, aus.
Da für ZÄHLENWENN() als Suchkriterium eine Zahl oder einen Text erwartet wird und das Vergleichszeichen keine Zahl ist, muss man es in diesem Fall in Anführungszeichen setzen. Beim Vergleich wird es korrekt weiterverwendet.
Wenn man eine Funktion wie die Heute-Funktion in Anführungszeichen setzt, führt Excel diese nicht aus, sondern behandelt sie wie irgendeinen beliebigen Text. Öffne doch mal ein neues Excel-Formular und probiere was bei der Eingabe von =HEUTE() und ="HEUTE()" herauskommt.
Die angegebene Formel sollte eigentlich nichts anderes als das Ergebnis 0 liefern können, so lange die geprüften Daten korrekt sind, da Buchstaben größer sind als jede Zahl, was jedes Datum ausschließt, und der Inhalt von leere Zellen innerhalb der Zähl-Funktion weder größer noch kleiner als irgendwelche Zeichen ist.
Um das Vergleichszeichen in Kombination mit dem Ergebnis der Heute-Funktion zu benutzen, benutzt man deshalb einfach das Vergleichszeichen in Anführungszeichen, gefolgt von der Funktion ohne Anführungszeichen und verbindet beides mit einem &-Zeichen. Damit sollte die Formel selber dann einwandfrei funktionieren, was aber sehr wahrscheinlich nicht das beschriebene Problem behebt.

Das selbe trifft aber auch auf jede Programmiersprache zu, wenn man nicht weiß wie sie arbeitet.

Wenn ich das richtig sehe, gibt es die Funktion nur in VB. Warum sollte das einer funktionierenden Schreibweise vorzuziehen sein?

Ob eine leere Zelle bei Excel einen Wert enthält oder nicht, kann man wohl drüber streiten, in jedem Fall bestimmt Excel selber wie mit einer leeren Zelle umgegangen wird, je nach dem was man gerade versucht zu machen.

Davon abgesehen dass bei Ein- und Ausgabe von negativen Daten die Datums-Formatierung nicht mehr funktioniert, wäre das auch kein Problem:

'Lieferantenliste BSCI Status'!D2:D224;"<>"&""

Seine Lösung ist, von der Problembeschreibung ausgehend, einwandfrei. Ich wüsste aber nicht wie das beschriebene Problem mit der angegebenen Formel zusammenhängen sollte da leere Zellen weder größer noch kleiner als irgendwelche anderen Werte sind und somit selbst mit falsch geschriebenem Suchkriterium nicht gezählt werden dürften, außer natürlich man sucht explizit leere Zellen oder alles was dem Suchkriterium nicht entspricht.
Ich bin mir sicher dass sich die hier angegebene Formel von der verwendeten unterscheidet oder der Fehler von einer anderen Stelle kommen muss. Möglicherweise verweist der Namensbereich auf eine falsche Spalte, wodurch z.B. Zeilenbeschriftungen geprüft werden oder in den leeren Zellen steht doch etwas, wird aber durch irgendeine Formatierung ausgeblendet. Das müsste aber der Fragesteller selber prüfen oder eine Beispieldatei in der der Fehler auftritt zur Verfügung stellen.

Habe ich. Der Hinweis auf EVAL und entsprechendem Link zur Funktions-Erklärung sollte eigentlich reichen. Das Ganze wird als Formel behandelt und nicht als TEXT.

Ich habe mal das IMHO zu betonende Wort mit Fett-Schrift hervorgehoben. Es sind und bleiben Formeln.

Wer an Excel mit dem Gedanken rangeht, dass es faktisch eine Programmiersprache ist, wird tiefergreifende „Formel-Spielereien“ wie sie z. B. mit SUMMENPRODUKT() möglich sind, eher nicht verstehen (ich meine hier tatsächlich verstehen, nicht auswendig lernen a’la „wenn man a macht, passiert b“).

Ich könnte ja verstehen, wenn die Funktionweise von EVAL sich nicht sofort erschliesst. Aber Du tust so, als hätte ich sie nicht erwähnt.

Folgendes zeigt das prinzipielle Vorgehen von SUMMEWENN() auf:

grafik

A1: =">HEUTE()"
B1: =SUMMEWENN(B3:B8; ">0")
B4:B8: Formel von B3 runterziehen.

Anmerkung: Der Umweg über den Namensmanager muss sein, da AUSWERTEN() (aka. EVAL()) eine undikumentierte Funktion ist und somit nicht direkt zur Verfügung steht.

Probiere es aus. Entferne einfach in o. g. Beispiel das Datum aus B8

… und somit wiederhole ich nochmal:

Das hatte ich überlesen …

Es geht darum, das Funktionsprinzip aufzuzeigen und dass es in Excel grundsätzlich in der Codebasis enthalten ist. Wie und wo diese Codebasis genutzt oder gar offengelegt wird ist eine vollkommen andere Frage und bei der vorliegenden Fragestellung vollkommen irrelevant.

BTW: In Excel & Co. ist VBA, nicht VB integriert.

Da ist eine andere Metaebene gegeben.

Mir ist klar wozu die Funktion dient aber du kannst doch nicht einfach die Rahmenbedingungen der Fragestellung ändern und dann behaupten dass meine Aussage falsch ist, vor allem wenn die Funktion gar nichts mit meiner Annahme, dass der Größenvergleich von Werten auf der Reihenfolge in der ASCII-Tabelle basiert, zu tun hat.
Außerdem ist es ein Text, bis es von EVAL als Formel interpretiert wird.

Ich habe nie behauptet dass Excel eine Programmiersprache wäre oder es damit verglichen. Meine Aussage war nur, dass die Syntax von Excel durchaus Ähnlichkeiten mit einer stark eingeschränkten Programmiersprache hat. Keine Ahnung warum du überhaupt mit Programmiersprachen angefangen hast.

Nach meinem Verständnis versucht die Funktion das was ihr vorliegt als funktionierende Formel zu interpretieren und ein Ergebnis zu liefern. In deinem Beispiel wird eine Formel bzw. ein einfacher Vergleich von EVAL aus zwei Zellen miteinander verknüpft, was dann berechnet werden kann.
Die Funktion taucht in der ursprünglichen Fragestellung nicht auf, weshalb ich davon ausgehe dass sie vom Fragesteller nicht benutzt wird und somit nichts mit der Fragestellung und auch nichts mit dem beschriebenen Problem zu tun hat.

Stimmt, an die Zombie-Formeln hatte ich gar nicht mehr gedacht. Damit hatte ich mich mal beschäftigt, habe es nach einiger Zeit aber aufgegeben da sie zwar durchaus nützlich sein können, man aber wirklich ganz genau wissen muss was man tut. Ansonsten kommt es sehr leicht zu versteckten Fehlern und evtl. Performance-Problemen. Letztendlich hatte ich da aber auch nichts gefunden was man nicht anderweitig ohne übertriebenen Aufwand lösen kann, wobei ich aber AUSWERTEN() und sicherlich ein paar andere bisher nicht kannte.

Ich verstehe nicht ganz worauf du hinaus willst. Ich würde nichts anderes als eine Fehlermeldung erwarten, immerhin macht Excel exakt das was du in die Formel reingeschrieben hast und das führt logischerweise zu einem Syntaxfehler.
Wenn ein Datum eingetragen ist, wird von AUSWERTEN() die Datumszahl mit dem Text >HEUTE() verknüpft. Das heißt, es sind zwei Werte mit einem Vergleichszeichen dazwischen, was problemlos ein Ergebnis liefert.
Wenn aber kein Datum eingetragen ist, wird der Inhalt der leeren Zelle mit >HEUTE() verknüpft. Das heißt, du hast ein Vergleichszeichen und dahinter einen Wert. Da ein Wert vor dem Zeichen fehlt, ist das keine gültige Formel, weshalb die Meldung #WERT! weitergegeben wird.

Würde man stattdessen mit einer leeren Zelle rechnen, würde Excel sie als 0 interpretieren. Dein Konstrukt würde z.B. mit =AUSWERTEN(Tabelle1!$A9+0 & Tabelle1!$A$1) funktionieren.
Du könntest es zum Vergleich natürlich auch mal mit der Formel aus der Fragestellung oder der von mir korrigierten Formel aus meiner ersten Antwort probieren, die machen genau das was ich gesagt habe, ohne irgendeine Fehlermeldung.

Ich sehe schon … Es geht dir nicht um Argumente. Du möchtest das einfach so … EOT für mich.