Das grosse Archiv mit 641
VBA-freien Formellösungen und Tips
 
   
 
 ÜBER UNS   NEWS   FORMELN   TIPPS   KONTAKT   FORUM   LINKS 
   
Übersicht   Zauberbuch   Rätselbuch   Sparbuch   Bücher-Downloads / Errata  
 
Datum/Zeit (1) ->

Der letzte/erste Tag des Monats + Liste bestimmter Wochentage * (176)
 
 
Aufgabe
Von einem vorgegebenen Datum soll der letzte, der erste Tag bzw. ein bestimmter, letzter/erster Wochentag des Monats bzw. eine Liste des gesamten Monats ermittelt werden.

Lösung
Datum steht in A1

=DATUM(JAHR(A1);MONAT(A1)+1;0)
ersetzt die AddInn-Funktion =MONATSENDE(A1;0)
nur den Tag liefert:
=32-TAG(A1-TAG(A1)+32)

Der erste Tag im Monat lautet:
=DATUM(JAHR(A1);MONAT(A1);1)
oder
=A1-TAG(A1)+1
den jeweils 1. Januar liefert:
=1*(1&-JAHR(A1))

Soll ein bestimmter, letzter Wochentag des Monats ermittelt werden - der Wochentag steht in A2 (1=Mo bis 7=So) von Tobias Wutschka:
=DATUM(JAHR(A1);MONAT(A1)+1;)-REST(DATUM(JAHR(A1);MONAT(A1)+1;6-A2);7)
Verkürzt von Erich Gier:
=7*KÜRZEN(DATUM(JAHR(A1);MONAT(A1)+1;6-A2)/7)+A2-6

Der erste, bestimmte Wochentag in A2 des Monats (1=Mo bis 7=So) ist:
=7*KÜRZEN(DATUM(JAHR(A1);MONAT(A1);6-A2)/7)+A2+1

Steht der so ermittelte, erste Wochentag in A4, sind die restlichen im Monat ab A5:
=WENN(TAG(A4+7)<8;"";A4+7)
runterkopieren

Ergänzung vom 14.11.2019
Handelt es sich um 3 Tage - z.B.: Montag, Dienstag, Donnerstag {1;2;4}, steht in A4:
=KKLEINSTE(7*KÜRZEN(DATUM(JAHR(A$1);MONAT(A$1);6-{1;2;4})/7)+{1;2;4}+1;ZEILE(X1))
bis A6 runterkopieren
=WENN(TAG(A4+7)<8;"";A4+7) steht dann in A7

Alternative mit der Funktion ARBEITSTAG.INTL von RPP63 und Lupo1
Zwischen den Gänsen stehen die Wochentage entweder mit 0 oder 1. Nullen sind die Tage, die NICHT ausgeschlossen werden - obiges Beispiel also "0010111"
in A4 steht:
=ARBEITSTAG.INTL(A1-TAG(A1);1;"0010111")
ab A5 dann:
=ARBEITSTAG.INTL(A4;1;"0010111")


Erläuterung
A5 in der letzten Formel ist aber open end - also über den Monat hinausgehend.
Mit Monatsbegrenzung wird's viel zu lang:
=WENNFEHLER(WENN(TAG(ARBEITSTAG.INTL(A4;1;"0010111")) < TAG(A4);"";ARBEITSTAG.INTL(A4;1;"0010111"));"")
Da findet sicher jemand was einfacheres ?

 
    zurück


 
powered by telltarget