Komplexe Formel anpassen
#1
Hallo zusammen,

ich habe hier folgende Formel: 

Code:
=WENN(WENN(UND(DY48="in time";ISTLEER(CO48)=WAHR;W48<$EC$3);V48/L48;WENN(UND(DY48="in time";ISTLEER(CR48)=WAHR;Z48<$EC$3);Y48/L48;WENN(UND(DY48="in time";ISTLEER(CU48)=WAHR;AC48<$EC$3);AB48/L48;WENN(UND(DY48="in time";ISTLEER(CX48)=WAHR;AF48<$EC$3);AE48/L48;WENN(UND(DY48="in time";ISTLEER(DA48)=WAHR;AI48<$EC$3);AH48/L48;WENN(UND(DY48="in time";ISTLEER(DD48)=WAHR;AL48<$EC$3);AK48/L48;WENN(UND(DY48="in time";ISTLEER(DG48)=WAHR;AO48<$EC$3);AN48/L48;WENN(UND(DY48="in time";ISTLEER(DJ48)=WAHR;AR48<$EC$3);AQ48/L48;WENN(UND(DY48="in time";ISTLEER(DM48)=WAHR;AU48<$EC$3);AT48/L48;WENN(UND(DY48="in time";ISTLEER(DP48)=WAHR;AX48<$EC$3);AW48/L48))))))))))=0;"";WENN(UND(DY48="in time";ISTLEER(CO48)=WAHR;W48<$EC$3);V48/L48;WENN(UND(DY48="in time";ISTLEER(CR48)=WAHR;Z48<$EC$3);Y48/L48;WENN(UND(DY48="in time";ISTLEER(CU48)=WAHR;AC48<$EC$3);AB48/L48;WENN(UND(DY48="in time";ISTLEER(CX48)=WAHR;AF48<$EC$3);AE48/L48;WENN(UND(DY48="in time";ISTLEER(DA48)=WAHR;AI48<$EC$3);AH48/L48;WENN(UND(DY48="in time";ISTLEER(DD48)=WAHR;AL48<$EC$3);AK48/L48;WENN(UND(DY48="in time";ISTLEER(DG48)=WAHR;AO48<$EC$3);AN48/L48;WENN(UND(DY48="in time";ISTLEER(DJ48)=WAHR;AR48<$EC$3);AQ48/L48;WENN(UND(DY48="in time";ISTLEER(DM48)=WAHR;AU48<$EC$3);AT48/L48;WENN(UND(DY48="in time";ISTLEER(DP48)=WAHR;AX48<$EC$3);AW48/L48;"")))))))))))

Ja, ich weiß... geht sicher auch eleganter - aber hat soweit funktioniert. 

Mein Problem: 
In Zelle DY48 steht ein Status. Aktuell wird nur der Wert gezogen, wenn der Status auf "in time" steht. 

Zukünftig soll der Wert aber gezogen werden wenn der Status auf "in time" ODER auf "early" steht. 

Wie / wo baue ich da das Oder ein damit alles gleich bleibt und auch bei Status early ausgeführt wird?
Top
#2
Du wiederholst unnötig 1000mal "in time" in lokalen UNDs, die genauso rausgeklammert werden könnten. Das "early" käme dann per ODER hinzu.

Auch der Rest der Formel lässt sich arrayisieren, so dass Du nicht jede 6. Milchkanne persönlich ansprechen musst.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top
#3
Danke für die Info. 

Könntest du mir auch zeigen wie? Wenn ich das wüsste hätte ich es schon selbst so gemacht  23
Top
#4
Moin

Die Monsterformel ist sicher auch einem schlechten Datenaufbau geschuldet.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Top
#5
=WENN(
WENN(UND(DY48="in time";ISTLEER(CO48)=WAHR;W48<$EC$3);V48/L48;
WENN(UND(DY48="in time";ISTLEER(CR48)=WAHR;Z48<$EC$3);Y48/L48;
WENN(UND(DY48="in time";ISTLEER(CU48)=WAHR;AC48<$EC$3);AB48/L48;
WENN(UND(DY48="in time";ISTLEER(CX48)=WAHR;AF48<$EC$3);AE48/L48;
WENN(UND(DY48="in time";ISTLEER(DA48)=WAHR;AI48<$EC$3);AH48/L48;
WENN(UND(DY48="in time";ISTLEER(DD48)=WAHR;AL48<$EC$3);AK48/L48;
WENN(UND(DY48="in time";ISTLEER(DG48)=WAHR;AO48<$EC$3);AN48/L48;
WENN(UND(DY48="in time";ISTLEER(DJ48)=WAHR;AR48<$EC$3);AQ48/L48;
WENN(UND(DY48="in time";ISTLEER(DM48)=WAHR;AU48<$EC$3);AT48/L48;
WENN(UND(DY48="in time";ISTLEER(DP48)=WAHR;AX48<$EC$3);AW48/L48))))))))))=0;"";
WENN(UND(DY48="in time";ISTLEER(CO48)=WAHR;W48<$EC$3);V48/L48;
WENN(UND(DY48="in time";ISTLEER(CR48)=WAHR;Z48<$EC$3);Y48/L48;
WENN(UND(DY48="in time";ISTLEER(CU48)=WAHR;AC48<$EC$3);AB48/L48;
WENN(UND(DY48="in time";ISTLEER(CX48)=WAHR;AF48<$EC$3);AE48/L48;
WENN(UND(DY48="in time";ISTLEER(DA48)=WAHR;AI48<$EC$3);AH48/L48;
WENN(UND(DY48="in time";ISTLEER(DD48)=WAHR;AL48<$EC$3);AK48/L48;
WENN(UND(DY48="in time";ISTLEER(DG48)=WAHR;AO48<$EC$3);AN48/L48;
WENN(UND(DY48="in time";ISTLEER(DJ48)=WAHR;AR48<$EC$3);AQ48/L48;
WENN(UND(DY48="in time";ISTLEER(DM48)=WAHR;AU48<$EC$3);AT48/L48;
WENN(UND(DY48="in time";ISTLEER(DP48)=WAHR;AX48<$EC$3);AW48/L48;"")))))))))))

Das sind schon mal zwei gleiche Teile, aus denen man mit WENNFEHLER nur einen machen kann.
Dann das "in time", welches rausgegliedert werden muss, 
und wo hinter das "early" kommt mit ODER kommt.
Und dann jede 3. Milchkanne (statt 6., das lag an den schlechten Umbrüchen).

Bei 500 Fragen im Forum macht man nicht mehr diese vier Fehler gemeinsam. Max!
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top
#6
Vielleicht weiß ich nach 500 Beiträgen immer noch so wenig, weil einem hier nur gesagt wird was man besser machen könnte - aber nicht wie? 
Wenn ich wüsste wie ich deine Vorschläge umsetzen muss hätte ich das doch logischerweise schon selbst getan. 
Da ich es offenbar nicht weiß bringt mir auch dein Hinweis nicht viel.
Top
#7
Wenn Dir also, wie von Dir beschrieben, die Trauben schon in den Mund gehängt werden, muss man sich nun auch noch sagen lassen, dass man Dir die Fragen dazu an die Hand gibt, auf dass wir antworten dürfen, wie wir auf die Lösung gekommen sind?

Versteh mich nicht falsch. Natürlich darfst Du hier immer weiter fragen. Und natürlich wird Dir auch meistens geantwortet werden.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top
#8
Ich finde die Art und Wiese wie hier "geholfen" wird oft ziemlich unsinnig. 

Ich weiß, dass ich in der Funktion ein ODER einbauen muss - habe ich ja auch im Ursprungspost so geschrieben. Aber offenbar weiß ich nicht wie genau, da es doch relativ komplex ist wenn;und;oder zusammen zu verknüpfen. 

Die Spielereien mit der Vereinfachung der Funktion ist da mal noch ganz außen vor. 


Ist es denn wirklich zu viel verlangt dass ihr an einem Teilabschnitt der Funktion einmal das ODER einbaut um mir so ein Praxisbeispiel zu geben?


Habe es dann doch selbst gemacht... zwar dirty.. aber es funktioniert... der Zweck heiligt die Mittel. 

Code:
=WENN(WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(CO48)=WAHR;W48<$EC$3);V48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(CR48)=WAHR;Z48<$EC$3);Y48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(CU48)=WAHR;AC48<$EC$3);AB48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(CX48)=WAHR;AF48<$EC$3);AE48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(DA48)=WAHR;AI48<$EC$3);AH48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(DD48)=WAHR;AL48<$EC$3);AK48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(DG48)=WAHR;AO48<$EC$3);AN48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(DJ48)=WAHR;AR48<$EC$3);AQ48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(DM48)=WAHR;AU48<$EC$3);AT48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(DP48)=WAHR;AX48<$EC$3);AW48/L48))))))))))=0;"";WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(CO48)=WAHR;W48<$EC$3);V48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(CR48)=WAHR;Z48<$EC$3);Y48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(CU48)=WAHR;AC48<$EC$3);AB48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(CX48)=WAHR;AF48<$EC$3);AE48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(DA48)=WAHR;AI48<$EC$3);AH48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(DD48)=WAHR;AL48<$EC$3);AK48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(DG48)=WAHR;AO48<$EC$3);AN48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(DJ48)=WAHR;AR48<$EC$3);AQ48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(DM48)=WAHR;AU48<$EC$3);AT48/L48;WENN(UND(ODER(DY48="in time";DY48="early");ISTLEER(DP48)=WAHR;AX48<$EC$3);AW48/L48;"")))))))))))
Top
#9
Hallo S...,

A) Warum willst du eine 0 durch "" ersetzen?
Wenn dich nur die Anzeige der 0 stört, kannst du über das Zahlenformat die Anzeige unterdrücken.

B) Änderungen
Im Folgenden nur den hinteren Teil deiner Formel

1. Deine Formel
Code:
=WENN(UND(DY48="in time";ISTLEER(CO48)=WAHR;W48<$EC$3);V48/L48;
WENN(UND(DY48="in time";ISTLEER(CR48)=WAHR;Z48<$EC$3);Y48/L48;
WENN(UND(DY48="in time";ISTLEER(CU48)=WAHR;AC48<$EC$3);AB48/L48;
WENN(UND(DY48="in time";ISTLEER(CX48)=WAHR;AF48<$EC$3);AE48/L48;
WENN(UND(DY48="in time";ISTLEER(DA48)=WAHR;AI48<$EC$3);AH48/L48;
WENN(UND(DY48="in time";ISTLEER(DD48)=WAHR;AL48<$EC$3);AK48/L48;
WENN(UND(DY48="in time";ISTLEER(DG48)=WAHR;AO48<$EC$3);AN48/L48;
WENN(UND(DY48="in time";ISTLEER(DJ48)=WAHR;AR48<$EC$3);AQ48/L48;
WENN(UND(DY48="in time";ISTLEER(DM48)=WAHR;AU48<$EC$3);AT48/L48;
WENN(UND(DY48="in time";ISTLEER(DP48)=WAHR;AX48<$EC$3);AW48/L48;""))))))))))



2. Ausklammern von DY48, Berücksichtigen von "early" und entfernen von "=WAHR"
Code:
=WENN(ODER(DY48="in time";DY48="early");
WENN(UND(ISTLEER(CO48);W48<$EC$3);V48/L48;
WENN(UND(ISTLEER(CR48);Z48<$EC$3);Y48/L48;
WENN(UND(ISTLEER(CU48);AC48<$EC$3);AB48/L48;
WENN(UND(ISTLEER(CX48);AF48<$EC$3);AE48/L48;
WENN(UND(ISTLEER(DA48);AI48<$EC$3);AH48/L48;
WENN(UND(ISTLEER(DD48);AL48<$EC$3);AK48/L48;
WENN(UND(ISTLEER(DG48);AO48<$EC$3);AN48/L48;
WENN(UND(ISTLEER(DJ48);AR48<$EC$3);AQ48/L48;
WENN(UND(ISTLEER(DM48);AU48<$EC$3);AT48/L48;
WENN(UND(ISTLEER(DP48);AX48<$EC$3);AW48/L48;""))))))))));"")


3. Listen anstelle von Einzelwerten
Code:
=WENN(ODER(DY48="in time";DY48="early");INDEX(V48:AW48;;VERGLEICH(1;(CO48:DP48="")*(W48:AX48<$EC$3)*(REST(SPALTE(V48:AW48);3)=1);0))/L48;"")

4. Fehlermeldung abfangen wenn keine Bedingung zutrifft (Vergleich findet keine 1)
Code:
=WENNFEHLER(WENN(ODER(DY48="in time";DY48="early");INDEX(V48:AW48;;VERGLEICH(1;(CO48:DP48="")*(W48:AX48<$EC$3)*(REST(SPALTE(V48:AW48);3)=1);0))/L48;"");"")


ps. Eine komplexere Forme kann man über das Einfügen von Zeilenumbrüchen (Alt+Enter) lesbarer machen.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • StrammerMax
Top
#10
Das "unsinnig" geben wir an jmd., der schon 500 Fragen gestellt hat, und immer noch nicht unaufgefordert ein Ausschnitts-.xlsx anhängt, gern zurück.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste