Seite 1 von 1

Sehe Formelfehler nicht

Verfasst: Fr, 29.06.2012 08:46
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

Re: Sehe Formelfehler nicht

Verfasst: Fr, 29.06.2012 08:53
von bst
Morgen Simon,

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

funktioniert nicht. Nimm:

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

cu, Bernd

Re: Sehe Formelfehler nicht

Verfasst: Fr, 29.06.2012 08:55
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

Re: Sehe Formelfehler nicht

Verfasst: Fr, 29.06.2012 09:25
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

Re: Sehe Formelfehler nicht

Verfasst: Fr, 29.06.2012 09:26
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

Re: Sehe Formelfehler nicht

Verfasst: Fr, 29.06.2012 09:39
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

Re: Sehe Formelfehler nicht

Verfasst: Sa, 30.06.2012 13:55
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

Re: Sehe Formelfehler nicht

Verfasst: Sa, 30.06.2012 16:22
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