Clever-Excel-Forum

Normale Version: Komplexe Formel anpassen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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?
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.
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
Moin

Die Monsterformel ist sicher auch einem schlechten Datenaufbau geschuldet.
=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!
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.
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.
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;"")))))))))))
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.
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.
Seiten: 1 2