Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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?
Antworten 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.
Antworten 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
Antworten 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.

Antworten 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!
Antworten 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.
Antworten 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.
Antworten 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;"")))))))))))
Antworten 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
Antworten 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.
Antworten Top


Gehe zu:


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