Erster Sonntag .. Samstag im Monat

Ers­ter be­lie­bi­ger Wo­chen­tag in ei­nem Mo­nat

Ex­cel, alle Ver­sio­nen

Die Auf­ga­be

Es soll für ein ge­ge­be­nes Da­tum der ers­te Son­ntag, Mon­tag, Dien­stag, … im Mo­nat des entsprechen­den Da­tums gefun­den wer­den.

Die­se Auf­gabe lässt sich sehr gut per VBA-Ma­kro mit ein­er selb­st de­fi­nier­ten Funk­tion (UDF) lö­sen. Fü­gen Sie dazu in ein ge­ne­rel­les Mod­ul der ak­tu­el­len Ar­beits­map­pe den (als *.txt-File) hier als *.zip gespe­icherten Code ein (bit­te nur die ent­pack­te *.txt). Ge­hen Sie dazu so vor:

  • Öff­nen Sie nach dem ent­pack­en die Da­tei mit dem Code.
  • Ko­pie­ren Sie den kom­plet­ten Code der *.txt-Da­tei in die Zwis­chen­ablage.
  • Öff­nen oder ak­ti­vie­ren Sie bei Be­darf das File, die Ar­beits­map­pe, wo die Funk­tion ver­wen­det wer­den soll.
  • Fü­gen Sie erforder­lichen­falls  ein Mod­ul ein. Wie das geht, ist beispiel­sweise hier auf­ge­zeigt.
  • StrgV, um in den (even­tu­ell noch) lee­ren Edi­tor-Bere­ich den In­halt der Zwis­chen­ablage einzufü­gen. Soll­te der eben ko­pier­te Code nicht mehr in der Zwis­chen­ablage sein, ent­fer­nen Sie even­tu­ell falsch einge­fügte Wer­te, ko­pie­ren Sie noch ein­mal aus der Text-Da­tei und fü­gen dann den In­halt in den Edi­tor ein. Alter­na­tiv kön­nen Sie natür­lich auch den Code abtip­pen …  😀
  • Wenn Sie mö­gen, schlie­ßen Sie ger­ne den VBA-Edi­tor. Er wird in die­ser Form nicht mehr be­nö­tigt.

Als Alter­na­tive gibt es noch die Mög­lich­keit, dass Sie di­rekt in den VBA-Edi­tor ge­hen und die­se Klas­sen-Da­tei di­rekt über den entsprechen­den Me­nü­punkt im­por­tie­ren, dann liegt al­les bere­its am richti­gen Ort. Da kann dann ei­gent­lich nichts schief ge­hen … (Die Klas­sen­da­tei liegt auch in der *.zip, sie­he weit­er oben, falls Ihr Brows­er die Da­tei di­rekt öff­net und nicht zum Down­load anbi­etet.)

▲ nach oben …

An­wen­dung

Ab so­fort kann die eben geschaf­fene UDF (selb­st de­fi­nier­te Funk­tion) in der ak­tu­el­len Map­pe an be­lie­bi­ger Stel­le einge­set­zt wer­den.

Angenom­men, in A1 ste­ht ein be­lie­bi­ges Da­tum. Wich­tig ist nur, dass es wirk­lich ein (se­ri­el­les) Da­tum ist und kein Text! Als Bei­spiel sei das Da­tum der 06.01.2000 und es soll das ers­te Woch­enende, also der ers­te Sam­stag die­ses Mo­nats gefun­den wer­den. Ge­ben Sie dann in B1 fol­gende For­mel ein:

=Fir­stX­day­In­Month(A1;„sa”)

Das ers­te Argu­ment (hier: A1) ist das Da­tum, welch­es als Grund­lage für die Berech­nung dient (hier natür­lich die Zel­le mit dem Da­tum). Das muss ein „echt­es” Da­tum sein, son­st wird ein falsch­er Wert zu­rück ge­ge­ben, näm­lich der 00.01.1900 (kein Schreib­feh­ler!). Das zwei­te Argu­ment ist der Wochen­tag, welch­er zu­grun­de ge­legt wer­den soll. In der obi­gen For­mel ist das "sa". Hier kön­nen Sie Zah­len oder auch Tex­te ver­wen­den. Für Zah­len gilt: Son­ntag = 1, Mon­tag = 2, und der Sam­stag = 7. Ver­wen­den Sie Tex­te, dann müs­sen die­se in dop­pelte Anführungsze­ichen (sog. Gänse­füßchen) einge­fasst wer­den. Sie kön­nen dann die Kurz­form "So" .. "Sa" ver­wen­den oder den Na­men des Wochen­t­ages voll auss­chreiben, also "Son­ntag" .. "Sam­stag" oder auch „Sonn­abend”. Da­bei ist Groß- Klein­schrei­bung nicht rel­e­vant, selb­st "diEn­sTaG" wird akzep­tiert und kor­rekt aus­gew­ertet.

Als Ergeb­nis der Funk­tion wer­den Sie eine se­ri­el­le Zahl erhal­ten, wel­che dem berech­neten Da­tum ent­spricht. Im oben genan­nten Fall wäre das 36526. Als Da­tum for­matiert wird in der Zel­le dann der 01. Jan­u­ar 2000 dar­ge­stellt.

Falls Sie ohne viel Auf­wand ein­mal prü­fen wol­len, wie solch eine Ta­bel­le aus­sieht und wie die Funk­tion angewen­det wird, dann la­den Sie ger­ne die­se Ex­cel-Da­tei her­un­ter und acht­en Sie bit­te bei Excel-Ver­sio­nen ab 2007 dar­auf, dass ein Ma­kro bzw. VBA-Code aus­ge­führt wer­den kann. – Falls Sie die­se Funk­tion öf­ter in ver­schiede­nen Da­tei­en ein­set­zen wol­len, kön­nen Sie den Code auch als Add-In spe­ich­ern und dann in Ihr Ex­cel ein­binden. Hin­weise dazu find­en Sie hier und auch hier im Blog.

Hin­weis: Wie Sie solch eine Funk­tion ein­binden kön­nen, er­fah­ren Sie hier im Blog. Selb­stver­ständlich kön­nen Sie die­se UDF auch als Add-In spe­ich­ern / er­stel­len und nach dem Ein­binden in al­len Excel-Map­pen nut­zen. Mehr dazu an die­ser Stel­le für Ver­sio­nen bis Ex­cel 2003 hier, ab Ex­cel 2007 schau­en Sie hier nach.

Hin­weise: Selb­stre­dend ist es mög­lich, die Funk­tion so umzugestal­ten, dass auch als Text vor­liegende kalen­darische Datum­swerte akzep­tiert wer­den. Soll­te es erforder­lich sein, dass meh­re­re For­men der übergebe­nen Dat­en kor­rekt aus­gew­ertet wer­den, ste­ht Ih­nen un­ser Spon­sor GMG Com­put­er-Con­sult­ing ger­ne zur Sei­te. Eine Mail an uns wer­den wir ger­ne weit­er­leit­en. – Und zweit­ens: Stö­ren Sie sich bit­te nicht an dem englis­chsprachi­gen Na­men der Funk­tion. Sie kön­nen ihn ger­ne in ei­nen beliebi­gen, den Vor­gaben entsprechen­den Na­men än­dern. Und last but not least: Bei Be­darf sen­den wir Ih­nen ger­ne die Da­tei auch im 2003er-For­mat (*.xls) zu.

▲ nach oben …

Rück­mel­dun­gen / Feed­back ger­ne per Mail an mich (G.​Mumme@​Excel-​ist-​sexy.​de)

Hat Ih­nen der Bei­trag ge­fal­len?
Er­leich­tert die­ser Bei­trag Ihre Ar­beit?

Dann wür­de ich mich über ei­nen Bei­trag Ihrer­seits z.B. 2,00  freu­en … (← Klick mich!)

Dieser Beitrag wurde unter Datum und Zeit, Downloads, Mit VBA/Makro, Musterlösungen abgelegt und mit , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.