Mehrere Wenn hintereinander, wie schlank gestalten?
#1
Huhuu

Habe mich dazu entschlossen, bei meinem Dienstplan Projekt, dass schon weit fortgeschritten ist, die Feiertage über ein "reihen" WENN zu lösen. Die wenns habe ich auch schon zusammen:

Code:
=WENN(B9=Ostersonntag-2;$Z$41;
WENN(B9=Ostersonntag;$Z$41;
WENN(B9=Ostersonntag+1;$Z$41;
WENN(B9=Ostersonntag+39;$Z$41;
WENN(B9=Ostersonntag+49;$Z$41;
WENN(B9=Ostersonntag+50;$Z$41;
WENN(B9=Ostersonntag+60;$Z$41;
WENN(B9=WOCHENTAG(1;17);$Z$41;
0))))))))

So weit so gut... Doch ist dieses $Z$41 nur ein Dummy und steht für eine ellenlange Formel, die für jeden der betroffenen Kalendertage nocheinmal etwas abgewandelt, also fortgeschrieben ist..

Code:
$Z$41 steht für:
=WENN(WOCHENTAG(B9)=1;MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+(C9>D9))-MAX(Basisdaten!$O$11;C9))+MAX(;(MIN(Basisdaten!$P$11;D9+(C9>D9))-C9)*(Basisdaten!$O$11>Basisdaten!$P$11))+MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+0)-Basisdaten!$O$11)*(C9>D9);0)


Wie ich den "dann" Befehl kürzen? Immerhin geht es für jeden Monat um rund 90 unterschiedlieche bzw. fortgeschriebene Formeln

Ne elegante Idee, die ich als Poweranfänger verstehe? 05 


Grüüße
Marcus

Komplett ausgeschrieben sähe es so aus:

22 
Code:
=WENN(B9=Ostersonntag-2;MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+(C9>D9))-MAX(Basisdaten!$O$11;C9))+MAX(;(MIN(Basisdaten!$P$11;D9+(C9>D9))-C9)*(Basisdaten!$O$11>Basisdaten!$P$11))+MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+0)-Basisdaten!$O$11)*(C9>D9);
WENN(B9=Ostersonntag;MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+(C9>D9))-MAX(Basisdaten!$O$11;C9))+MAX(;(MIN(Basisdaten!$P$11;D9+(C9>D9))-C9)*(Basisdaten!$O$11>Basisdaten!$P$11))+MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+0)-Basisdaten!$O$11)*(C9>D9);
WENN(B9=Ostersonntag+1;MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+(C9>D9))-MAX(Basisdaten!$O$11;C9))+MAX(;(MIN(Basisdaten!$P$11;D9+(C9>D9))-C9)*(Basisdaten!$O$11>Basisdaten!$P$11))+MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+0)-Basisdaten!$O$11)*(C9>D9);
WENN(B9=Ostersonntag+39;MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+(C9>D9))-MAX(Basisdaten!$O$11;C9))+MAX(;(MIN(Basisdaten!$P$11;D9+(C9>D9))-C9)*(Basisdaten!$O$11>Basisdaten!$P$11))+MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+0)-Basisdaten!$O$11)*(C9>D9);
WENN(B9=Ostersonntag+49;MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+(C9>D9))-MAX(Basisdaten!$O$11;C9))+MAX(;(MIN(Basisdaten!$P$11;D9+(C9>D9))-C9)*(Basisdaten!$O$11>Basisdaten!$P$11))+MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+0)-Basisdaten!$O$11)*(C9>D9);
WENN(B9=Ostersonntag+50;MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+(C9>D9))-MAX(Basisdaten!$O$11;C9))+MAX(;(MIN(Basisdaten!$P$11;D9+(C9>D9))-C9)*(Basisdaten!$O$11>Basisdaten!$P$11))+MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+0)-Basisdaten!$O$11)*(C9>D9);
WENN(B9=Ostersonntag+60;MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+(C9>D9))-MAX(Basisdaten!$O$11;C9))+MAX(;(MIN(Basisdaten!$P$11;D9+(C9>D9))-C9)*(Basisdaten!$O$11>Basisdaten!$P$11))+MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+0)-Basisdaten!$O$11)*(C9>D9);
WENN(B9=WOCHENTAG(1;17);MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+(C9>D9))-MAX(Basisdaten!$O$11;C9))+MAX(;(MIN(Basisdaten!$P$11;D9+(C9>D9))-C9)*(Basisdaten!$O$11>Basisdaten!$P$11))+MAX(;MIN(Basisdaten!$P$11+(Basisdaten!$O$11>Basisdaten!$P$11);D9+0)-Basisdaten!$O$11)*(C9>D9);
0))))))))

Und das wäre nur eines von 90 Feldern.... 17
Antworten Top
#2
Hola,

wir sollen also eine Formel kürzen ohne den Tabellenaufbau zu kennen, bzw. was in den Zellen steht die in der Formel angesprochen werden?
Gruß,
steve1da
Antworten Top
#3
Moin

Ich meine Ralf (RPP63) hatte eine Super-Feiertags-Formel kreiert. Allerdings mit Office365-Features.
Wir sehen uns!
... Detlef

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

Antworten Top
#4
Danke für die Blumen, Detlef!
In A1 steht das Jahr, die Liste erhält man mit
PHP-Code:
=SORTIEREN(EINDEUTIG(
LET(
FFT;DATUM(A1;1;{1;121;276;305;359;360})+WENN(MONAT(DATUM(A1;2;29))=2;{0;1;1;1;1;1});
OFT;RUNDEN((TAG(MINUTE(A1/38)/2+55)&".4."&A1)/7;0)*7-6+{-2;0;1;39;49;50;60};
x;ZEILEN(FFT);
y;ZEILEN(OFT);
z;SEQUENZ(x+y);
WENN(z<x+1;INDEX(FFT;z);INDEX(OFT;z-x))
))) 

Aber ist ja hier nicht zielführend.
Um festzustellen, ob ein Datum ein Feiertag ist, braucht es kein ellenlanges WENN-Konstrukt, sondern besagte Liste (egal, wie die erstellt wird) und ein simples Zählenwenn:
ABCD
12021
2Fr          01.0112.05.2021kein Feiertag
3Fr          02.0413.05.2021Feiertag
4So        04.04
5Mo      05.04
6Sa        01.05
7Do        13.05
8So        23.05
9Mo      24.05
10Do        03.06
11So        03.10
12Mo      01.11
13Sa        25.12
14So        26.12

ZelleFormel
D2=WENN(ZÄHLENWENN(A$2:A$14;C2);"";"kein ")&"Feiertag"
D3=WENN(ZÄHLENWENN(A$2:A$14;C3);"";"kein ")&"Feiertag"

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • TalaxGießen
Antworten Top
#5
(19.10.2021, 17:36)steve1da schrieb: Hola,

wir sollen also eine Formel kürzen ohne den Tabellenaufbau zu kennen, bzw. was in den Zellen steht die in der Formel angesprochen werden?
Gruß,
steve1da

Die Tabelle ist mittlerweile sehr komplex geworden. Dort mal eben durchblicken zu wollen, stelle ich mir sehr schwierig vor.

Daher habe ich es mit den Bruckstüchen versucht.


@RPP63
Danke da hab ich was zu knabbern Blush
Antworten Top
#6
Da brauchst Du nicht knabbern, sondern einfach strukturiert vorgehen.
Gut, ein paar Cracker kannst Du währenddessen ja verputzen …

Erstelle die Feiertagsliste und gebe ihr den Namen FT
Aus
PHP-Code:
=WENN(B9=Ostersonntag-2;$Z$41;
WENN(B9=Ostersonntag;$Z$41;
WENN(B9=Ostersonntag+1;$Z$41;
WENN(B9=Ostersonntag+39;$Z$41;
WENN(B9=Ostersonntag+49;$Z$41;
WENN(B9=Ostersonntag+50;$Z$41;
WENN(B9=Ostersonntag+60;$Z$41;
WENN(B9=WOCHENTAG(1;17);$Z$41;
0)))))))) 
wird dann ein flauschiges
PHP-Code:
=WENN(ZÄHLENWENN(FT;B9);$Z$41;0

Das andere Monster schaue ich mir mal an, aber ich erwarte durchaus auch Deinen Einsatz!

Übrigens:
Was erwartest Du von WOCHENTAG(1;17)
Das ergibt IMMER 1, folglich ist B9=1 offensichtlich immer FALSCH
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • TalaxGießen
Antworten Top


Gehe zu:


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