Excel verschachtelte Wenn funktion, warum mit dem größten wert anfangen?

7 Antworten

Die Wennfunktion ist für solche Anwendungen schon ungeeignet.
Die Verweis/Index Funktionen sind für sowas da.
Der Sinn innerhalb einer verschachtelten Wennfunktion sortiert vorzugehen, liegt im einfacheren Aufbau.
Statt 2 Grenzen innerhalb einer Wennfunktion abzufragen, kann man so kontinuierlich nur eine grenze abfragen.

Dabei beim größtem anzufangen bringt vermutlich einen geringen Performance Vorteil. Da zu erwarten ist, dass mehr Schüler eine 1 oder 2 haben, als eine 5 oder 6.
Daher wird die Wennfunktion früher beendet.


Silneos 
Beitragsersteller
 22.01.2016, 14:28

Ich MUSS die Wennfunktion benutzen, deswegen leider nicht möglich, aber trotzdem danke , ich merks mir für die Zukunft :)

0

Nehmen wir mal die Werte 0, 50 und 100.

Alle mir geläufigen Programmiersprachen arbeiten "von oben nach unten" den Quelltext durch.  Sagen wir mal als Beispiel:

Wenn Punkte >=0, dann Note = 6

Wenn Punkte >=50 dann Note =4

Wenn Punkte >=100, dann Note =1

Und sagen wir jetzt mal, die Punktzahl ist 75. Das Programm guckt jetzt, ob die Punkte >= 0, das trifft zu, also Note=6. Das Programm guckt aber in dieser Wenn-Funktion dann nicht weiter, ob es z.B. auch noch größer als 50 ist, da es ja bereits ein Ergebnis hat.

Wenn wir das jetzt aber andersherum schreiben:

Wenn Punkte >=100, dann AktionZ

Wenn Punkte >=50 dann AktionY

Wenn Punkte >=0, dann AktionX

,dann wird es zuerst feststellen, dass 100 nicht geht, 75 aber größer 50 ist, also wird das Ergebnis Note=4 festgelegt und die Funktion ist abgeschlossen.

Also zusammenfassend:  Bei einer Funktion, bei der du ein Ergebnis haben willst, was eine Wenn-Funktion ist, wird die Funktion abgeschlossen, sobald ein Ergebnis vorhanden ist, ob es weiter Möglichkeiten gibt wird nicht geguckt. Das müsstest du dann noch mit einer Und-Funktion programmieren, also Wenn Punkte >=0 und Punkte <50, dann 6, sonst 4


Silneos 
Beitragsersteller
 22.01.2016, 10:26

Perfekt, danke :)

1

Ganz einfach,

Wenn der Wert z.B. 94 Punkte ist, deine erste abfrage aber sagt =WENN(Punktzahl>80;"Mehr als 80 Punkte";WENN(PUNKTZAHL>90;"Mehr als 90 Punkte;"...") dann wird es nie dazu kommen dass deine Abfrage ob es größer als 90 ist nie überprüft werden, weil die Überprüfung schon bei den größer als 80 erfolgreich war.

Grüße,

iMPerFekTioN

Woher ich das weiß:Berufserfahrung – Eigenständiges lernen während und nach meiner Ausbildung

azmd108  22.01.2016, 10:24

Man könnte auch einfach sagen

=WENN(UND(Punkzahl>80;Punktzahl<90);"Mehr als 80 Punkte";Wenn(UND(Punktzahl>90;Punktzahl<100;"Mehr als 90 Punkte"))) .
Dann ist es egal wo man mit der Überprüfung anfängt, siehe meinen Beitrag.

0
iMPerFekTioN  22.01.2016, 10:27
@azmd108

Er soll erklären warum man mit dem kleinsten Wert anfangen soll/muss, (Schule oder was weiß ich warum) da bringt deine Erklärung oder Begründung "Muss man nicht, man kann mit UND arbeiten" nichts.

0
offeltoffel  22.01.2016, 10:27
@azmd108

Generell bin ich der Meinung: richtig ist, was funktioniert. Wenn man aber auf Stil achtet, dann wird es schon haarig. Es stellt sich die Frage, ob massige Und-Verknüpfungen eleganter sind, als eine Wenn-Dann-Sonst:Wenn-Dann-Sonst- ... - Abfrage. Über Programmierphilosophie lässt sich trefflich streiten ;)

3
daCypher  22.01.2016, 11:58
@azmd108

Mal abgesehen davon, dass ich mehrere Wenn-Dann Verschachtelungen eleganter finde als Wenn-Dann-Verschachtelungen mit zusätzlichem UND, sieht man an der vorgeschlagenen Lösung zusätlich noch, dass man bei der Variante mit UND schnell Fehler einbauen kann. Hier würde nämlich kein Ergebnis rauskommen, wenn die Punktzahl = 90 ist.

1

Das muss man nur, wenn man mit "größer als" oder "kleiner als" arbeitet. Die Funktion nimmt halt das erste Ergebnis, was wahr ist.

Beispiel:
= WENN(A1 > 95; 1; WENN(A1 > 80; 2; WENN(A1 > 66; 3; 6)))

Hier sind drei Wenns ineinander verschachtelt. Wenn jetzt in A1 beispielsweise eine 90 steht, fängt Excel an zu rechnen und prüft zuerst, ob A1 größer als 95 ist. Das ist falsch, also verzweigt es in den Falsch-Teil der Funktion, wo wieder ein Wenn ist, was prüft, ob A1 größer als 80 ist. Das ist dann wahr, also verzweigt es in den Wahr-Teil der Funktion, wo das Ergebnis 2 drin steht und schreibt die 2 in die Zelle.

Wenn man die Funktion jetzt umdrehen würde:
= WENN(A1 > 66; 3; WENN(A1 > 80; 2; WENN(A1 > 95; 1; 6)))

dann würde beim Beispiel von 90 schon beim ersten Wenn wahr rauskommen und er würde eine 3 reinschreiben. Wenn der Wert kleiner oder gleich 66 wäre, würde eine 6 reinkommen.


PWolff  22.01.2016, 10:33

Silneos,

Wenn du statt der Funktion WENN die (m. E. angemessenere) Funktion VERWEIS verwendest, musst du sogar mit dem kleinsten Wert anfangen:

=VERWEIS(<Prozentzahl>;{0;30;50;67;81;92};{6;5;4;3;2;1})

da VERWEIS im Gegensatz zu SVERWEIS und WVERWEIS kein viertes Argument mit der Sortierrichtung zulässt (dafür aber auch direkt angegebene Matrizen anstelle der Bezüge akzeptiert). Es sei denn, das ist in einer späteren Excel-Version geändert worden.

1

Ich nehme an du meinst folgendes Szenario:

wenn Punkte>80, dann Note 1, sonst: wenn Punkte >60, dann Note 2, sonst: wenn Punkte > 40, dann Note 3 etc.?

Du könntest stattdessen auch jedes Mal abfragen: wenn Punkte >60 und <= 80 (kleiner/gleich), dann Note 2. Aber das ist einfach mehr Schreibaufwand und daher nicht unbedingt schön. Du prüfst daher erst den Extremfall, also ob mehr als 80 Punkte da sind, dann hast du sicher eine 1. Wenn das nicht der Fall ist, prüfst du, ob es mehr als 60 sind usw.

Du musst dabei aber nicht zwangsläufig beim GRÖßTEN anfangen. Genauso kannst du auch sagen:

wenn Punkte<20, dann Note 6, sonst: wenn Punkte <30, dann Note 5, sonst: etc.

Du solltest nur eben nicht jeden Fall einzeln prüfen, sondern die Fälle schrittweise von der einen Richtung her aufarbeiten. Ob du dabei oben oder unten anfängst, spielt keine Rolle.