[LAMBDA] (bundesdeutsche) HOLIDAYS
#1
HOLDIDAYS

Beschreibung:
Listet in einer Spalte alle Feiertage eines oder mehrerer Jahre und eines dt. Bundeslandes.

Syntax:
=HOLIDAYS(Jahr;Land)

Beispiel:
=HOLIDAYS(2017;"Brem") ergibt die 12 Feiertage von Bremen 2017
01.01.2017 14.04.2017 16.04.2017 17.04.2017 01.05.2017 25.05.2017
04.06.2017 05.06.2017 03.10.2017 31.10.2017 25.12.2017 26.12.2017
=HOLIDAYS(SEQUENZ(;2;2021);"MeVo") ergibt entsprechend die Feiertage 2021-2022 von Mecklenburg-Vorpommern

Code:
=LAMBDA(Jahr;Land;LET(
ArC;LAMBDA(a;b;LET( x;ZEILEN(a);y;SPALTEN(a);z;ZEILEN(b); k;SEQUENZ(x);m;SEQUENZ(x+z);n;SEQUENZ(;y); WENN(m<=x;INDEX(a;k;n);INDEX(b;m-x;n))));
EASTER;LAMBDA(Jahr;LET(
A;GANZZAHL(Jahr/100);
B;REST(19*REST(Jahr;19)+A-GANZZAHL(A/4)-GANZZAHL((A-GANZZAHL((A+8)/25)+1)/3)+15;30);
C;REST(32+2*REST(A;4)+2*GANZZAHL(REST(Jahr;100)/4)-B-REST(REST(Jahr;100);4);7);
D;B+C-7*GANZZAHL((REST(Jahr;19)+11*B+22*C)/451)+22;
E;DATUM(Jahr;WENN(D>31;4;3);WENN(D-31<1;D;D-31));E));
F;WAHL(SEQUENZ(7);-2;0;1;39;49;50;60)+EASTER(Jahr);
G;--(WAHL(SEQUENZ(11);"1.1";"6.1";"8.3";"1.5";"15.8";"20.9";"3.10";"31.10";"1.11";"25.12";"26.12")&"."&Jahr);
H;("25.12."&Jahr)-WOCHENTAG("25.12."&Jahr;2)-32;
I;{"1111111111111111";"1100000000000100";"0010000000000000";"1111111111111111";"1111111111111111";"1111111111111111";"1111111111111111";"1111111111111111";"1111111111111111";"1111111111111111";"1100001001110000";"0100000000010000";"0000000000000001";"1111111111111111";"0001110110001111";"1100000001110000";"0000000000001000";"1111111111111111";"1111111111111111"};
J;--TEIL(I;(3+SUCHEN(Land;"BaWüBayeBerlBranBremHambHessMeVoNiedNoWeRhPfSaarSachSaAnScHoThür"))/4;1);
K;FILTER(MTRANS(ArC(MTRANS(J);MTRANS(SORTIEREN(ArC(ArC(F;G);H)))));J);
L;INDEX(K;SEQUENZ(ZEILEN(K));SEQUENZ(;SPALTEN(K)-1;2));
M;EINDEUTIG(KKLEINSTE(L;SEQUENZ(ZEILEN(L)*SPALTEN(L))));
M))


Anmerkungen:
  1. Sonntage sind enthalten, sowohl feste als auch variable. Denn Oster- und Pfingstsonntag ergeben oft Feiertags- statt Sonntagszuschlag, soweit vorhanden.

  2. Mehrere Jahre müssen als Zeile(nvektor) eingegeben werden, wie im Beispiel "Mevo".

  3. Die Bundesländer sind mit den ersten 4 Buchstaben einzugeben, Doppelnamen mit deren 2+2. Siehe Code.

  4. Die Binärketten im Code könnte man um 11 Stück vermindern, da diese bundeseinheitlich 1 sind. Das ginge dann aber zu Lasten der Code-Ordnung.

  5. Im Code sind zwei eigene LAMBDA-Funktionen enthalten: ArC (ARRAY.COMBINE) in einer schlanken Version und EASTER (von maninweb, nach Gauss).

  6. Die einzelnen LET-Anweisungen erledigen folgendes:
A-E: Stufen innerhalb EASTER, siehe Link.
F: Liste der 7 von Ostern abhängigen FT: Karfr OsSo OsMo Himm PfSo PfMo Fronl
G: Liste der 11 fixen FT: Neuj 3Kö Frau 1Mai Mariä KindT 3Okt RefT AllH W1 W2
H: Ermittlung des Bußtags
I: 18 Binärketten, die die später sortierten FT den 16 Bundesländern zuordnen. Bayern und Thüringen haben dabei nur eine Kennzeichnung, obwohl dort kath. und ev. unterschieden wird.
J: Bildung des Spaltenvektors für das gewählte Bundesland "FT: ja (1) oder nein (0)"
K: Zuerst werden F-H untereinandergeklebt. Dann wird J als Spalte vorangeklebt. Dann wird nach J=1 gefiltert, so dass die unzutreffenden FT rausfallen.
L: J wird wieder entfernt, da die FT im Array nun endgültig bestimmt sind
M: Das Array (bei mehr als einem Jahr) wird zur Spalte umgeordnet, und der seltene Fall "1Mai=Himm" über EINDEUTIG entfernt.

Mit den gängigen Excelfunktionen kann man nun noch z.B. die SaSo-FT wegfiltern, oder den Anfang oder Ende genauer als ganze Jahre eingrenzen.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top
#2
Moin LCohen

Warum verwendest du nicht vorhandene Codes für die Bundesländer?
https://de.wikipedia.org/wiki/ISO_3166-2:DE
https://de.wikipedia.org/wiki/Kfz-Kennze...%C3%A4nder
Wir sehen uns!
... Detlef

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

Antworten Top
#3
Weiß ich aus dem Kopf, dass DE-ST Sachsen-Anhalt bedeutet?

Da ist mein System 1 Zeichen kürzer (manche Fälle sind sogar wegen SUCHEN bis runter zu einem Zeichen überhaupt möglich, aber das muss man testen) und trotzdem intuitiver. Minimal erforderlich:

B BaWü
H Hamb
Be Berl
Br Bran
He Hess
Me MeVo
Ni Nied
No NoWe

Rh RhPf
Sa Saar
Sc ScHo
Th Thür
Bay Baye
Bre Brem
Sac Sach
SaAn SaAn

(ungetestet)

Grundsätzlich hast Du natürlich recht. Die Funktion ist ja offen, und jeder kann sie anpassen.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top
#4
Länge ist hier nicht so entscheidend sondern Verwendung von Standards.
Bei ISO 3166:2 könnte man auf die ersten drei Zeichen verzichten und dann mit zwei Zeichen arbeiten.
Wir sehen uns!
... Detlef

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

Antworten Top
#5
Wie gesagt, Du hast recht.

Solcher Standards würde ja auch ich z.B. bei thailändischen oder chinesischen Provinzen bedürfen, schon wegen der anderen Sprache/Schrift.

Kann man gern anpassen. Bei DE-ST: Aus 4 wird dann 5 und aus 3 wird 4.

Man könnte es auch beides erlauben; dann hat der Inländer es etwas leichter mit meinen und der Ausländer mit Deinen Codes.

Bleibt noch der Fall Bay kath oder Bay ev. Oder auch Thü kath und Thü ev. (habe ich nicht berücksichtigt, aber was wäre bei Standardcodes?)
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top
#6
Es geht noch kürzer (dritter Eintrag pro Zeile, immer noch ungetestet), da INDEX Dezimalzahlen kürzt:

B BaWü
H Hamb
Be Berl r
Br Bran n
He Hess s
Me MeVo v
Ni Nied d
No NoWe 

Rh RhPf p
Sa Saar 
Sc ScHo 
Th Thür 
Bay Baye y
Bre Brem re
Sac Sach ac
SaAn SaAn aan


Zur Kontrolle, welches Bundesland nun wirklich ausgewählt ist, sollte die Funktion es vielleicht in der ersten Zeile hinschreiben?
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top


Gehe zu:


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