echo ("viewtopic_body.html wird ausgeführt!\n");

Datumsspielereien

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
d'r Bastler
Beiträge: 927
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 255 Mal
Danksagung erhalten: 134 Mal

Datumsspielereien

#1

Beitrag von d'r Bastler »

Moin allerseits,

Knobbi hat hier eine optimierte Fassung zur Ermittlung der Nummer eines Tages im Jahr präsentiert. Ich habe mal ein wenig weiter gebastelt und die Optionen Offset (neg/pos Versatz zu heute) und führende Nullen eingebaut (allg. Modul) in Word, Excel oder anderen Office Apps - Ach ja und Kalenderwoche und Monat dazugeklebt ;)

Code: Alles auswählen

Option Explicit

Sub Test()
Dim iOff As Integer
    On Error Resume Next
    iOff = InputBox("Offset eingeben")
    MsgBox "Tag " & DayOfYear(Date, iOff) & vbCrLf & "Woche " & CalendarWeek(Date, iOff) & vbCrLf & "Monat " & MonthNumber(Date, iOff), , Date + iOff
End Sub

Public Function DayOfYear(Optional ByVal Value As Date, Optional ByVal Offset As Long = 0) As String
    If Int(Value) = 0 Then Value = Date
    DayOfYear = Format(DatePart("y", Value + Offset), "000")
End Function

Public Function CalendarWeek(Optional ByVal Value As Date, Optional ByVal Offset As Long = 0) As String
    If Int(Value) = 0 Then Value = Date
    CalendarWeek = Format(DatePart("ww", Value + Offset, 2, 2), "00")
End Function

Public Function MonthNumber(Optional ByVal Value As Date, Optional ByVal Offset As Long = 0) As String
    If Int(Value) = 0 Then Value = Date
    MonthNumber = Format(Month(Value + Offset), "00")
End Function
Viel Spaß damit!
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 pro [32] & Win11 + Office 2024 pro [64] & macOS.X15 + Office2019 pro & Android12 & XL365
knobbi38
Beiträge: 86
Registriert: 20. Okt 2024, 14:15
Hat sich bedankt: 9 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Datumsspielereien

#2

Beitrag von knobbi38 »

Hallo d'r Bastler,

leider ist die verwendete Funktion zur Berechnung der Kalenderwoche nach ISO8601 nicht ganz fehlerfrei und liefert u.U. falsche Ergebnisse. Entweder man kann in Excel ab 2007 auf die entsprechende Funktion

Code: Alles auswählen

WorksheetFunction.WeekNum(Datum, 21)
zurückgreifen oder nimmt eine der vielen fehlerbereinigten Funktionen, z.B. von hier:
https://codekabinett.com/rdumps.php?Lan ... -ermitteln
https://www.online-excel.de/excel/singsel_vbacdba.html

Im Anhang ein kleines Modul mit verschiedenen Berechnungen und einer Testroutine, die auf die kritischen Tage/Jahre eingeht:
modWeeknumber.bas

Gruß Knobbi38

Nachtrag:
Es ist zwar einfach, den Tagesoffset einfach mit dem Operator "+" zum Datumswert zu addieren, aber bei Berechnungen mit Double-Werten kann es durchaus auch mal zu Rundungsfehler kommen. Deshalb würde ich bei wiederverwenden Funktionen eher die dafür vorgesehene VBA Funktion DateAdd() verwenden, welche immer für einen korrekten Datumswert sorgt. So wird aus der einfachen Offsetberechnung z.B.:

Code: Alles auswählen

 Format(DatePart("y", Dateadd("d",Offset,Value)), "000")
Das mehr an Schreibarbeit läßt sich in einem wiederverwendbarem Modul sicherlich verschmerzen ;) , aber dafür ist man auch auf der "sicheren Seite".
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Folgende Benutzer bedankten sich beim Autor knobbi38 für den Beitrag:
d'r Bastler
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast