Feiertage, Samstage und Sonntage
30.09.2015 16:25:40
P-Quest:-)
ich bastle gerade an einem vertrackten Terminproblem.
Für eine Reihe von Produkttests gibt es eine Vorgabe, wann diese stattfinden müssen. Test 1 findet am Starttag statt. Dann folgen fünf weitere Tests im Abstand von 3, 14 und 28, 42 und 56 Tagen jeweils nach dem Starttag.
Das wäre kein Problem, wenn es da nicht die Nebenbedingungen gäbe.
1. Der Test an Tag 3 kann um max. 4 Tage verschoben werden.
2. Die Prüfungen an Tag 14, 28,42 und 56 haben eine Toleranz von +- 2 Tagen.
3. An Samstagen, Sonn- und Feiertagen finden keine Tests statt. Die Feiertage finden sich in einer seperaten Liste.
4. Die Tests haben unterschiedliche Längen - 1 Tag oder 1/3 Tag. Folglich kann ein Tag, an dem ein 1-Tages-Test stattfindet, nicht für weitere Tests genutzt werden. Bei den Test mit der Dauer von 1/3 Tag lassen sich dann entsprechend 3 Tests an einem Tag durchführen.
Ich hab versucht das Problem mit einer Formel zu lösen. Daraus ergibt sich dann aber ein Moloch von Wenn's und Wochentagen. Ich prüfe z.b. ob ein Testtag auf einen Feiertag fällt. Wenn das zutrifft, schaue ich, auf welchen Wochentag der Feiertag fällt. Ist es ein Freitag, veschiebe ich den Test auf Donnerstag, ist es ein anderer Wochentag, verschiebe ich ihn auf den nächsten Tag. Bisher alles noch ohne Berücksichtigung der 1/3 Tage.
Und das ganze soll später für verschiedene Länder und deren Feiertage funktionieren.
Hier mal ein Beispiel für eine der Formeln:
=WENN(UND(SUMMENPRODUKT((PubHol[Country]=$C$2)*(PubHol[Public Holiday]=WENN(WOCHENTAG(C4+B5;1)=7; C4+B5+2;WENN(WOCHENTAG(C4+B5;1)=1;C4+B5+1;C4+B5))))=1;ODER(WOCHENTAG(WENN(WOCHENTAG(C4+B5;1)=7; C4+B5+2;WENN(WOCHENTAG(C4+B5;1)=1;C4+B5+1;C4+B5));14)=1;WOCHENTAG(WENN(WOCHENTAG(C4+B5;1)=7;C4+B5+2; WENN(WOCHENTAG(C4+B5;1)=1;C4+B5+1;C4+B5));14)=2));WENN(WOCHENTAG(C4+B5;1)=7;C4+B5+2; WENN(WOCHENTAG(C4+B5;1)=1;C4+B5+1;C4+B5))-1;WENN(SUMMENPRODUKT((PubHol[Country]=$C$2) *(PubHol[Public Holiday])=1);WENN(WOCHENTAG(C4+B5;1)=7;C4+B5+2;WENN(WOCHENTAG(C4+B5;1)=1;C4+B5+1; C4+B5))+1;WENN(WOCHENTAG(C4+B5;1)=7;C4+B5+2;WENN(WOCHENTAG(C4+B5;1)=1;C4+B5+1;C4+B5))))
Diese Formel halte ich nun nicht für eine gute Idee.
Kann man das einfacher machen? Ist hier eher VBA und/oder eine benutzerdefinierte Funktion angeraten?
Ich weiss, starker Tobak, aber vielleicht hat ja jemand eine Idee?!
Gruß,
Peter