Sehe Formelfehler nicht

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

schimox
**
Beiträge: 24
Registriert: Fr, 29.06.2012 08:19

Sehe Formelfehler nicht

Beitrag von schimox »

Hei,
ich sehe den Fehler in folgender Formel nicht:
=WENN(7*L35>C43>=5*L35;0,85+(0,7-0,85)/(7*L35-10*L35)*(C43-10*L35);"nicht möglich")
Die Formel soll zuerst abfragen, ob sich der Wert C43 in einem bestimmten Bereich befindet. Wenn ja, dann soll sie diesen Wert linear interpolieren und nach der Formel berechnen. Wenn sich der Wert nicht in diesem Berech befindet, ist wohl C43 falsch und daher nicht möglich. Nur leider spuckt mir die Formel in jedem Fall "nicht möglich" aus. Der Wert C43 hängt unter anderem auch von L35 ab. Hab ich da einen totalen Ueberlegungsfehler gemacht? Wer kann mir helfen? Ich bin ein Anfänger, aber möchte sehr gerne endlich Calc und Excel lernen.
Um noch zu präzisieren: Die obige Formel ist Teil dieser grossen Formel:
=WENN(O35="Nein";WENN(C43>=14*L35;1;WENN(14*L35>C43>=10*L35;1+(0,85-1)/(10*L35-14*L35)*(C43-14*L35);WENN(10*L35>C43>=7*L35;0,85+(0,7-0,85)/(7*L35-10*L35)*(C43-10*L35);WENN(7*L35>C43>=5*L35;0,85+(0,7-0,85)/(7*L35-10*L35)*(C43-10*L35);"nicht möglich"))));WENN(O35="Ja";WENN(C43>=14*L35;1;WENN(14*L35>C43>=10*L35;1+(0,85-1)/(10*L35-14*L35)*(C43-14*L35);WENN(10*L35>C43>=7*L35;0,85+(0,7-0,85)/(7*L35-10*L35)*(C43-10*L35);WENN(7*L35>C43>=4*L35;0,7+(0,5-0,7)/(4*L35-7*L35)*(C43-7*L35);"nicht möglich"))));""))
Die ganze Formel gibt mir auch immer "nicht möglich". Grundsätzlich soll die Formel prüfen in welchem Bereich sich C43 befindet und dann C43 linear interpolieren, mit ein paar Randbedingungen. Zuerst soll sie aber noch abfragen, ob O35 "Ja" oder "Nein" ist. Ich glaube es gibt einen einfacheren Befehl, statt diese ganzen "wenn"-Verschachtelungen. Kann mir das jemand erklären, wie ich das einfacher machen kann?
Besten Dank!
Simon
bst
*****
Beiträge: 222
Registriert: Mo, 18.01.2010 16:14
Wohnort: Ilsfeld

Re: Sehe Formelfehler nicht

Beitrag von bst »

Morgen Simon,

=WENN(5>3>1;1;0)

funktioniert nicht. Nimm:

=WENN(UND(5>3;3>1);1;0)

cu, Bernd
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Sehe Formelfehler nicht

Beitrag von Stephan »

ich kann DEine Beobachtung nicht bestätigen, denn bei mir gibt die TEilformel zunächst einmal einen 'Divion durch Null'-Fehler, weil der Teil (7*L35-10*L35)*(C43-10*L35) bei mir (leere Tabelle) natürlich 0 Null.

Im Übrigen würde ich an dEiner Stelle eine Beispieldatei zur Verfügung stellen, weil cdas das Antworten für Andere erleichtert, evtl. sogar konkrete Antworten erstz möglich macht.


Gruß
Stephan
schimox
**
Beiträge: 24
Registriert: Fr, 29.06.2012 08:19

Re: Sehe Formelfehler nicht

Beitrag von schimox »

Besten Dank Bernd und Stephan.
Das mit dem UND() hat geklappt. Super. Nur bin ich mir nicht sicher, ob die Berechnung, die die Formel macht auch wirklich stimmt. Denn nach der geschriebenen Formel, gibt es auch einen Fall, wo das ganze 1 ergeben sollte. Ich habe das ausprobiert, aber es gibt eigentlich immer etwas, was kleiner 1 ist. Vielleicht ist es ein Fehler in der Norm Eurocode5, wo ich alle diese Fälle herausgenommen habe, also, dass es gar nie 1 ergeben kann. Das wäre schon noch wichtig. Denn, diese Formel ergibt mir eigentlich ein Faktor mit dem ich das Tragvermögen einer Verbindung im Baubereich reduzieren muss. Wenn diese um 20% verringert wird, dann ist das enorm viel.
Gibt es einfachere Möglichkeiten, solche Probleme zu lösen, statt immer diese "wenn"-Fälle zu verschachteln?

Gruss
Simon
Dateianhänge
Erste Berechnung.ods
(12.46 KiB) 74-mal heruntergeladen
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Sehe Formelfehler nicht

Beitrag von Karolus »

Hallo
Sowas wie =WENN(7*L35>C43>=5*L35;.. geht nicht, da müsste man schreiben:
=WENN((7*L35>C43)*(C43>=5*L35);..

Innerhalb der langen Formel ist eine der Prüfungen aber völlig sinnfrei da diese Prüfung schon in der Bedingung "vorher" stattfand.:
WENN(C43>=14*L35;1;WENN(14*L35>C43
die rote Prüfung ist überflüssig, da die Funktion wg grün andernfalls gar nicht diesen Zweig betritt.

Sowas (10*L35-14*L35) könntest du doch eigentlich zusammenfassen zu (-4*L35)

ebenso (0,85-1)-0,15

Und vermutlich lässt sich dein knapp 5 Zeilen langes Formelmonster mit SVERWEIS und Co auf eine halbe Zeile reduzieren.
Dazu bräuchte man aber mal eine Beispielsdatei.

Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
schimox
**
Beiträge: 24
Registriert: Fr, 29.06.2012 08:19

Re: Sehe Formelfehler nicht

Beitrag von schimox »

Ok, besten Dank Karo.
Ich wusste nicht, dass das UND() auch mit einem einfachen * ersetzt werden kann. Habe ich das denn auch richtig verstanden?
Die Zusammenfassungen, die du mir vorgeschlagen hast, sind schon klar und "nur" mathematischer Natur. Für mich ist es wichtig, dass ich die Faktoren mit denen L35 multipliziert wird beibehalte, da je nach Verbindungsmittel diese anders sein können. Sonst verliere ich den Ueberblick.
Ok, das mit der Prüfung, die die vorrangige ausschliesst, muss ich mir nochmals anschauen.
Besten Dank.
Simon
Gert Seler
*******
Beiträge: 1763
Registriert: Di, 03.10.2006 18:05

Re: Sehe Formelfehler nicht

Beitrag von Gert Seler »

Hallo Simon,
hier findest Du eine Erklärung der Funktion SVERWEIS, die von
Karolus vorgeschlagen wird :
http://www.ooowiki.de/CalcFunktionenTab ... C_WVERWEIS
ich hoffe das hilft weiter.

mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Sehe Formelfehler nicht

Beitrag von lorbass »

schimox hat geschrieben:Ich wusste nicht, dass das UND() auch mit einem einfachen * ersetzt werden kann. Habe ich das denn auch richtig verstanden?
Jein. Tatsächlich wird – etwas lax formuliert – "ein Stückchen Logik auf die Arithmetik abgebildet". Dies ist möglich, weil die Booleschen Werte WAHR und FALSCH programm-intern mit den Ganzzahl-Werten 1 und 0 dargestellt werden. Daraus ergibt sich die Möglichkeit, einen logischen Ausdruck äquivalent als arithmetischen Ausdruck zu formulieren.

Nehmen wir den den von Karolus in der ersten WENN-Funktion diskutierten Ausdruck (zunächst mal in einer "rein" logischen Formulierung)
  • UND((7*L35>C43);(C43>=5*L35))
Die beiden enthaltenen logischen Aussagen
  • (7*L35>C43)
    (C43>=5*L35)
können jede für sich logisch WAHR oder FALSCH sein. Die Wahrheitstabelle für das UND (»∧«) sieht bekanntlich so aus:
  • WAHR ∧ WAHR = WAHR
    WAHR ∧ FALSCH = FALSCH
    FALSCH ∧ WAHR = FALSCH
    FALSCH ∧ FALSCH = FALSCH
Mit den Abbildungen
  • logisches WAHR ⟼ arithmetische 1
    logisches FALSCH ⟼ arithmetische 0
ergibt sich eine arithmetisch sinnvolle, äquivalente Wahrheitstabelle genau dann, wenn an die Stelle des logischen ∧ die arithmetische Multiplikation – also »*« – tritt:
  • 1 * 1 = 1
    1 * 0 = 0
    0 * 1 = 0
    0 * 0 = 0
Diese Äquivalenz erlaubt es Karolus (und natürlich allen anderen Anwendern ;)) also letztendlich, "das UND() auch mit einem einfachen * [zu] ersetzen":
  • ((7*L35>C43)*(C43>=5*L35))
Man sollte sich aber immer klar machen, dass die Verwendung unterschiedlicher Datentypen und mathematischer Konzepte (mehr oder weniger) zufällig zum selben Ergebnis führt.

Gruß
lorbass
Antworten