Kalenderwoche soll um eins reduziert werden

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    Kalenderwoche soll um eins reduziert werden

    Hallo Leute,

    ich habe bisher immer eine Funktion für die Kalenderwochen Errechnung genutzt jedoch nie wirklich näher damit befasst.
    Jedoch muss ich nun die Funktion umbauen, damit es mir die Kalenderwoche der letzten Woche ausrechnet bzw. später abprüft.

    Folgende Funktion:

    Quellcode

    1. Function KWoche(ByVal Datum As Date)
    2. Dim t As Long
    3. t = (DateSerial(Year(Datum + (8 - Weekday(Datum)) Mod 7 - 3), 1, 1))
    4. KWoche = (((Datum - t - 3 + (Weekday(t) + 1) Mod 7)) \ 7 + 1)
    5. End Function


    Was muss ich umändern damit es genutzt werden kann um nach der letzten Kalenderwoche zu prüfen?
    Wäre auch cool wenn jemand die Funktion etwas näher erläutert (vorallem die "Mod").

    Danke euch!
    Hallo,

    Excel VBA bringt eine interne Kalenderwochenfunktion mit. Um die KW der letzten Woche zu ermitteln einfach ein Datum der letzten Woche übergeben.

    Visual Basic-Quellcode

    1. Debug.Print Format$(Now(), "ww", vbMonday, vbFirstFourDays) 'Diese Woche
    2. Debug.Print Format$(Now() - 7, "ww", vbMonday, vbFirstFourDays) 'Letzte Woche


    Edit:
    Mod ermittelt den Rest einer Division.

    7 Mod 4 ergibt 3

    7 Durch 4 = 1; Rest 3
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Hey @peterfido,

    gut zu wissen, dass es solch eine kurz Version gibt.
    Mir stellt sich nun die Frage, wie das ganze als Funktion aussieht..

    Quellcode

    1. Function KWoche(ByVal Datum As Date)
    2. Dim t As Long
    3. t = Format$(Now() - 7, "ww", vbMonday, vbFirstFourDays) 'Letzte Woche
    4. End Function


    so?

    Danke für die Erklärung!

    Grüße
    Hi,

    wohl eher So:

    VB.NET-Quellcode

    1. Sub test()
    2. MsgBox (KWoche("22.07.2016"))
    3. End Sub
    4. Function KWoche(ByVal Datum As Date)
    5. KWoche = Format$(Datum - 7, "ww", vbMonday, vbFirstFourDays) 'Letzte Woche
    6. End Function


    Du musst ja den Übergabeparameter berücksichtigen
    "Hier könnte Ihre Werbung stehen..."
    Hallo,

    Du möchtest wissen, wie eine Funktion als Funktion aussieht?

    Falls Du tatsächlich eine Funktion für die Funktion bauen möchtest, fehlt der Rückgabetyp der Function. Z.B. String, Byte, Integer, Long.

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Sub test()
    3. Debug.Print Kalenderwoche(Now(), -1)
    4. End Sub
    5. Private Function Kalenderwoche(ByVal Datum As String, Optional ByVal DifferenzInWoche As Integer = 0) As Byte
    6. If IsDate(Datum) Then
    7. Kalenderwoche = CByte(Format$(CDate(Datum) + DifferenzInWoche * 7, "ww", vbMonday, vbFirstFourDays))
    8. Else
    9. Kalenderwoche = 0
    10. End If
    11. End Function


    Edit:
    now() durch Datum ersetzt.

    Wenn Die Differenz zu groß / zu klein ist, dann tritt der nächste Fehler auf. Dieser lässt sich auch noch abfangen, falls Du das für die Schule oder so brauchst, überlasse ich das Dir...
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „peterfido“ ()