Beitrag
von 2clap » Sa 12. Jan 2013, 17:47
@ mikele: Respekt! - du hast das Problem gelöst! Ich habe deine Datei auf LO laufen lassen, und alles sieht aus wie es aussehen soll. Ich habe die 7 ersten sheets angeschaut und gesehen, dass du auf allen sheets viele Veränderungen gemacht hast. Großes Dankeschön, ich glaube ich kann diese Version in Zukunft so nutzen wie sie ist. Hier die gemeinsam erarbeitete Zusammenfassung des Problems und seiner Lösungen:
Problembeschreibung:
Es geht um die Funktion =WENN (Bedingung; DANN_Wert; SONST_Wert)
Die Bedingung muss ein logischer Wert (WAHR oder Falsch/0 oder 1) sein. Zahlenwerte ungleich Null werden immer als WAHR interpretiert, die Null als FALSCH. Ein String wird, wenn möglich, in eine Zahl umgewandelt (vergleiche die Wert-Funktion).
Das Problem tritt auf, wenn unter Bedingung eine Zelle erwähnt ist, die per “” als leer ausgewiesen wurde.
Excell/OO bzw. deren Wert-Funktion interpretieren diesen “”-String als NULL. Die Bedingung ist also nicht erfüllt (=FALSCH), es wird die SONST-Anleitung ausgeführt.
LO ist an der Stelle strenger/empfindlicher/anders: “” ist ein leerer String, der von der LO-Wert-Funktion nicht in die Zahl Null umgewandelt wird. Die WENN-Funktion interpretiert die Bedingung daher weder als erfüllt (Zahlenwert ungleich Null) noch als nicht erfüllt (Zahlenwert Null), sondern liefert eine Fehlermeldung (“#Wert”-Anzeige).
Alle von diesen Zellen abhängigen Zellen zeigen ebenfalls Fehlermeldungen. So kann es passieren, dass ganze Arbeitsblätter mit einer Menge von #Wert-Anzeigen (oder ###-Anzeigen, falls die "#-Wert"-Anzeigen nicht in die Zelle passen) übersät sind und wichtige Werte fehlen.
Die Lösungen:
- Balu: In die Zelle statt eines leeren Strings eine Null reinschreiben. Damit die Null aber nicht in die Statistik als eine Zahl reingeht, mit >0-Kriterium diese Nullen aus der Statistik rausnehmen.
Nachteil im Vergleich zur folgenden Lösung: Es tauchen viele Nullen auf, die die Übersichtlichkeit beeinträchtigen können.
- mikele I:
Hier wird die die Bedingung umformuliert.
Z.B. in sheet KA 1, Zelle D18: LO liefert mit der alten Funktion
=WENN(E18;SVERWEIS(E18;$F$57:$H$74;3);"")
einen Fehler, weil in E18 ein “” liegt. LO sieht die Bedingung weder als "gegeben" noch als "nicht gegeben" an, sondern liefert die Fehlermeldung "#Wert"(siehe oben).
Stattdessen wird durch
=WENN(E18="";"";SVERWEIS(E18;$F$57:$H$74;3))
abgefragt, ob E18 mit einem leeren String gefüllt ist. Wenn ja, ist die Bedingung erfüllt und D18 wird ebenfalls mit einem leeren String gefüllt. Falls nein, wird D18 mit dem Ergebnis der entsprechenden Berechnung gefüllt. (hier der Notenzuweisung per SVERWEIS)
- mikele II:
=WENN(ISTZAHL(E18);SVERWEIS(E18;$F$57:$H$74;3);””)
Wenn also in E18 eine Zahl steht, dann suche die Note ansonsten leerer String.
Fazit: Der Umgang mit leeren Zellen oder scheinbar leeren Zellen(“”) ist ein wirklich kniffliges Ding, das einem manchmal in die Verzweiflung treiben kann ...
Um es mal positiv zu formulieren: Libreoffice zwingt hier zu einer sauberen “Programmierung”.
Negativ ist es aber, wenn die eine Tabellenkalkulation sich so und die andere so verhält. Noch “gemeiner” wird es, wenn es (undokumentiert) von einer zur nächsten Version passiert.
Zuletzt geändert von
2clap am So 13. Jan 2013, 18:37, insgesamt 4-mal geändert.