Stefan Theobald
2010-01-13 18:13:01 UTC
***@all!
ich habe mir die Funktion zum ermitteln der Kalenderwoche nach DIN-Norm in
meine Arbeitsmappe gemacht.
Diese funktioniert auch - nur bin ich noch nicht ganz glücklich.
Kopiert man die Formel weiter runter, und die Zellen sind leer, wird immer
52 reingeschrieben.
Ich wollte das mit dem "If IsDate(dat) = True Then" unterdrücken, aber das
interessiert den garnicht. DAT wüsste doch der Wert sein, der an die Funktion
übergeben wird - oder bin ich da falsch?
Wie kann ich es also unterdrücken, dass bei leeren Zellen ein icht
gewünschter Wert erscheint?
Gruß
Stefan
Function DINKW(dat As Date) As Integer
'Aufruf / Verwendun: =MAPPE.XLS!DINKW(A1)
'Bei der Berechnung der Kalenderwoche gibt XL scheinbar ein falsches
Ergebnis aus.
'Wie wird die Kalenderwoche richtig berechnet?
'XL berechnet die Kalenderwoche standardmäßig nach amerikanischer Norm.
'Für Deutschland gilt die internationale Norm ISO 8601 (1973).
'1976 wurde festgelegt, dass die Woche mit dem Montag beginnt:
'DIN 1355 (1974), DIN EN 28601 (1993). Dies bedeutet für die Berechnung der
Kalenderwoche:
'Der 1. Januar eines Jahres gehört erst dann zur ersten Kalenderwoche,
'wenn dieser Tag auf einen Montag, Dienstag, Mittwoch oder Donnerstag fällt.
'Falls der 1. Januar ein Freitag, Samstag oder Sonntag ist, zählt er noch
zur letzten Kalenderwoche
'des vorherigen Jahres. Weiterhin können der 29., 30. und 31.12. eines Jahres
'schon zur 1. Kalenderwoche des neuen Jahres gehören.
If IsDate(dat) = True Then
Dim kw As Integer
kw = Int((dat - DateSerial(Year(dat), 1, 1) + _
((Weekday(DateSerial(Year(dat), 1, 1)) + 1) _
Mod 7) - 3) / 7) + 1
If kw = 0 Then
kw = DINKW(DateSerial(Year(dat) - 1, 12, 31))
ElseIf kw = 53 And (Weekday(DateSerial(Year(dat), 12, 31)) - 1) Mod
7 <= 3 Then
kw = 1
End If
DINKW = kw
Else
DINKW = 0
End If
End Function
ich habe mir die Funktion zum ermitteln der Kalenderwoche nach DIN-Norm in
meine Arbeitsmappe gemacht.
Diese funktioniert auch - nur bin ich noch nicht ganz glücklich.
Kopiert man die Formel weiter runter, und die Zellen sind leer, wird immer
52 reingeschrieben.
Ich wollte das mit dem "If IsDate(dat) = True Then" unterdrücken, aber das
interessiert den garnicht. DAT wüsste doch der Wert sein, der an die Funktion
übergeben wird - oder bin ich da falsch?
Wie kann ich es also unterdrücken, dass bei leeren Zellen ein icht
gewünschter Wert erscheint?
Gruß
Stefan
Function DINKW(dat As Date) As Integer
'Aufruf / Verwendun: =MAPPE.XLS!DINKW(A1)
'Bei der Berechnung der Kalenderwoche gibt XL scheinbar ein falsches
Ergebnis aus.
'Wie wird die Kalenderwoche richtig berechnet?
'XL berechnet die Kalenderwoche standardmäßig nach amerikanischer Norm.
'Für Deutschland gilt die internationale Norm ISO 8601 (1973).
'1976 wurde festgelegt, dass die Woche mit dem Montag beginnt:
'DIN 1355 (1974), DIN EN 28601 (1993). Dies bedeutet für die Berechnung der
Kalenderwoche:
'Der 1. Januar eines Jahres gehört erst dann zur ersten Kalenderwoche,
'wenn dieser Tag auf einen Montag, Dienstag, Mittwoch oder Donnerstag fällt.
'Falls der 1. Januar ein Freitag, Samstag oder Sonntag ist, zählt er noch
zur letzten Kalenderwoche
'des vorherigen Jahres. Weiterhin können der 29., 30. und 31.12. eines Jahres
'schon zur 1. Kalenderwoche des neuen Jahres gehören.
If IsDate(dat) = True Then
Dim kw As Integer
kw = Int((dat - DateSerial(Year(dat), 1, 1) + _
((Weekday(DateSerial(Year(dat), 1, 1)) + 1) _
Mod 7) - 3) / 7) + 1
If kw = 0 Then
kw = DINKW(DateSerial(Year(dat) - 1, 12, 31))
ElseIf kw = 53 And (Weekday(DateSerial(Year(dat), 12, 31)) - 1) Mod
7 <= 3 Then
kw = 1
End If
DINKW = kw
Else
DINKW = 0
End If
End Function