hmm: Kalenderwoche für mehrere jahre vorberechnen mit VBA

Hi Leute,

ich brauche eine Visual Basic Funktion die folgendes macht:

  1. Die funktiuon bekommt ein Datum ca. 02.03.2016

  2. die funktion bekommt außerdem eine Zahl, z.B. 120

  3. Die Funktion soll mir alle Kalenderwochen ausgeben beginnend mit der Kalenderwoche vom 02.03.2016 Das Problem bei

for i = 0 bis 120 do KALENDERWOCHE(02.03.2016) + i

ist, dass ab der Kalenderwoche 52 bzw 53 einfach mit 54 weitergezählt wird, d.h. es wird nicht ab dem 01.01.2017 mit KW1 gerechnet sondern mit KW53 bzw KW54

habt ihr eine Funktion die sich für meine zwecke eignet? hat Excel nicht irgendwo sowas rumliegen?

akzeptierte Antworten

  1. hi,

    ist, dass ab der Kalenderwoche 52 bzw 53 einfach mit 54 weitergezählt wird, d.h. es wird nicht ab dem 01.01.2017 mit KW1 gerechnet sondern mit KW53 bzw KW54

    Ein Jahr hat entweder 52 oder 53 Kalenderwochen je nachdem an welchem Tag es beginnt. Und der 1.1.2017 ist nicht KW1 sondern KW52/2016; dafür gibts Regeln ebenda.

    MfG

  2. Tach!

    Die Funktion soll mir alle Kalenderwochen ausgeben beginnend mit der Kalenderwoche vom 02.03.2016 Das Problem bei

    for i = 0 bis 120 do KALENDERWOCHE(02.03.2016) + i

    ist, dass ab der Kalenderwoche 52 bzw 53 einfach mit 54 weitergezählt wird, d.h. es wird nicht ab dem 01.01.2017 mit KW1 gerechnet sondern mit KW53 bzw KW54

    Da die Kalenderwoche nicht an einem bestimmten Datum sondern einer nicht ganz so einfachen Wochentagskonstellation umschaltet, lässt sich das nicht einfach weiterzählen und dann mit 1 weitermachen. Stattdessen würde ich jeweils 7 Tage dazuzählen und von dem Datum die Kalenderwochennummer ermitteln lassen.

    dedlfix.

    1. danke, kann ich davon ausgehen das die Methode mit 7 tage hochzählen fehlerfrei ist?

      1. Tach!

        kann ich davon ausgehen das die Methode mit 7 tage hochzählen fehlerfrei ist?

        Davon gehe ich aus. Zeitwerte werden intern als Anzahl der Tage seit einem bestimmten Anfangsdatum abgelegt (die Uhrzeit dazu als Bruchteile von Tagen). Das Addieren von Tagen ist somit problemlos möglich. Für das Ermitteln von Wochentagen und anderem gibt es Funktionen oder Formeln. Beides ist recht einfach zu finden.

        dedlfix.

      2. Hallo und guten Tag,

        danke, kann ich davon ausgehen das die Methode mit 7 tage hochzählen fehlerfrei ist?

        kommt darauf an, was die Politik entscheidet -> Beispiel

        Grüße
        TS

        --
        es wachse der Freifunk
        http://freifunk-oberharz.de
  3. @@hmm

    ich brauche eine Visual Basic Funktion die folgendes macht:

    Wieso Visual Basic? Deine Frage hast du doch mit „Excel“ getaggt‽

    habt ihr eine Funktion die sich für meine zwecke eignet? hat Excel nicht irgendwo sowas rumliegen?

    Du suchst die Excel-Funktion KALENDERWOCHE?

    Wenn ja, warum suchst du nicht danach?

    LLAP 🖖

    --
    „Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.“ —Johann Wolfgang von Goethe
    1. hm, ich schreibe ein Excel makro in visual Basic, den vba tag hab ich nicht gefunden

      Kalenderwoche benutze ich derzeit (mittels vba dynamisch in excel-zellen mit + 1 kopiert), dadurch kommt des zu dem oben beschrieben Problem.

      das ist ziemlich kompliziert, ich hoffe dass ich das mit den plus 7 tagen so umsetzen kann das es fehlerfrei funktioniert

      1. @@hmm

        Kalenderwoche benutze ich derzeit

        Ah ja, das schriebst du ja.

        (mittels vba dynamisch in excel-zellen mit + 1 kopiert), dadurch kommt des zu dem oben beschrieben Problem.

        das ist ziemlich kompliziert, ich hoffe dass ich das mit den plus 7 tagen so umsetzen kann das es fehlerfrei funktioniert

        Das i muss mit in die Klammer, mit 7 multipliziert, wie dedlfix schon schrieb. Sowas wie (ungetestet):

        for i = 0 bis 120 do KALENDERWOCHE(02.03.2016 + i * 7)

        LLAP 🖖

        --
        „Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.“ —Johann Wolfgang von Goethe
        1. danke

          =KALENDERWOCHE($B$1 + i*7;21)

          das scheint zu funktionieren

  4. Hallo und guten Tag,

    nur Pech, wenn Dir sowas widerfäht ;-P

    Grüße
    TS

    --
    es wachse der Freifunk
    http://freifunk-oberharz.de
  5. Wenn das Jahr wechselt und die erste Woche (Mo-So) des neuen Jahres nur drei (oder weniger) von sieben Tagen hätte, wird die alte Wochen-Nummer genommen.

    Hat sie vier (oder mehr) von sieben Tagen, bekommt sie die Wochen-Nummer = 1.

    Oder anders: Fällt der 1. Jan auf einen Fr, Sa oder So, ist er noch in der alten Wochen-Nummer, sonst in Woche 1.

    Linuchs

    1. schön

      beim zufügen von:

      iBlatt.Cells(zeile, 1) = "KALENDERWOCHE($B$1 +" & iterKw & "*7;21)"

      und manuellem zufügen von = geht alles

      aber bei

      iBlatt.Cells(zeile, 1) = "=KALENDERWOCHE($B$1 +" & iterKw & "*7;21)"

      bekomme ich Laufzeitfehler, warum?

      1. das hier funktioniert:

                     iBlatt.Cells(zeile, 1).Select
                        ActiveCell.FormulaR1C1 = "=WEEKNUM(R1C2 +" & iterKw & "*7,21)"
        

        PS: ich mag vba nicht

  6. MsgBox DatePart("ww", #11/30/2009#)
    

    http://www.vba-wissen.de/zeit.html

    google: vba zeitfunktionen