Was ist hier los?

Aktuell 1 Gast online
Besucher: 1413781
Vorlagen, Muster und Ratgeber zum Download
PageRank Verifizierung www.officetipps.net
Home arrow Excel arrow Pivottabellen arrow Excel arrow VBA Kalenderwoche ermitteln


VBA Kalenderwoche ermitteln PDF Drucken E-Mail
Benutzer Bewertung: / 5
SchlechtSehr gut 
Geschrieben von Horst Schulte   
Samstag, 23. September 2006
Frage: 

Ich arbeite mit Microsoft EXCEL für WINDOWS 95 / WINDOWS NT 3.51, Version 7.0. Gibt es eine Möglichkeit, die Kalenderwoche eines Datums zu berechnen?

Antwort: 

Mit Hilfe der Programmiersprache VISUAL BASIC für Applikationen (VBA) von EXCEL 7.0 haben Sie die Möglichkeit aus einem Datum die Kalenderwoche berechnen zu lassen. Die Eingabe des Datums erfolgt in einem Dialog, die Ausgabe erfolgt als Meldung. Nachfolgend finden Sie ein programmiertes Beispiel sowohl in englischem als auch in deutschem VBA-Code:


Englischer Code:

Sub KW_Test()
`Aufruf der Eingabedialogbox zur Abfrage des Datums
Y = InputBox("Geben Sie ein Datum ein", "Ermitteln der Kalenderwoche", "1.1.98")
`Aufruf der Funktion zur Berechnung der Kalenderwoche
X = KW(Y)
`Ausgabe der berechneten Kalenderwoche als Meldung
MsgBox "Ihr Datum [" + Y + "] ist In : " + X
End Sub


Function KW(KwDatum)

`Deklaration der Konstanten
Const Sonntag = 1
Const Montag = 2
Const Dienstag = 3
Const Mittwoch = 4
Const Donnerstag = 5
Const Freitag = 6
Const Samstag = 7

`Fehlersprungmarke setzen
On Error GoTo Fehlermarke:

`Bestimmung der zur Berechnung notwendigen Variablen
Jahresanfang = DateSerial(Year(KwDatum), 1, 1)
VorJahresEnde = DateSerial(Year(KwDatum) - 1, 1, 1)
WochentagJahresanfang = WeekDay(Jahresanfang)
WochentagVorJahresEnde = WeekDay(VorJahresEnde)
differenz = DateValue(KwDatum) - Jahresanfang

`bestimmt die Kalenderwoche des ersten Tags des Jahres
`ab Donnerstag -> KW1 des aktuellen Jahres
`bis Mittwoch -> KW 52/53 des letzten Jahres
`mittels der Differenz wird dann die KW des Eingabedatums berechnet
Select Case WochentagJahresanfang

Case Donnerstag
`Prüfung ob es sich um eine Schaltjahr handelt
If (differenz - (WochentagJahresanfang - 6)) / 7 <= 0.5 Then
KW = "KW 53"
Else
KW = "KW " + Str(Application.RoundUp((differenz - (WochentagJahresanfang - 6)) / 7, 0))
End If
Case Montag, Dienstag, Mittwoch, Freitag, Samstag, Donnerstag
If Application.RoundUp((differenz - (WochentagJahresanfang - 6)) / 7, 0) <= 0 Then
KW = "KW 52"
Else
KW = "KW " + Str(Application.RoundUp((differenz - (WochentagJahresanfang - 6)) / 7, 0))
End If
Case Sonntag
If differenz = 0 Then differenz = 1
KW = "KW " + Str(Application.RoundUp(differenz / 7, 0))
End Select
Exit Function
Fehlermarke:
MsgBox Error()

End Function


Deutscher Code:

Sub KW_Test()

Y = EingabeDlg("Geben Sie ein Datum ein"; "Ermitteln der Kalenderwoche"; "1.1.98")
X = KW(Y)
MeldungsDlg "Ihr Datum [" + Y + "] ist in : " + X
Ende Sub


Funktion KW(KwDatum)

Konst Sonntag = 1
Konst Montag = 2
Konst Dienstag = 3
Konst Mittwoch = 4
Konst Donnerstag = 5
Konst Freitag = 6
Konst Samstag = 7
Bei Fehler GeheZu Fehlermarke:
Jahresanfang = Datumszahl(Jahr(KwDatum); 1; 1)
VorJahresEnde = Datumszahl(Jahr(KwDatum) - 1; 1; 1)
WochentagJahresanfang = Wochentag(Jahresanfang)
WochentagVorJahresEnde = Wochentag(VorJahresEnde)
differenz = Datumswert(KwDatum) - Jahresanfang

Prüfe Fall WochentagJahresanfang

Fall Donnerstag
Wenn (differenz - (WochentagJahresanfang - 6)) / 7 <= 0,5 Dann
KW = "KW 53"
Sonst
KW = "KW " + ZnF(Anwendung.Aufrunden((differenz - (WochentagJahresanfang - 6)) / 7; 0))
Ende Wenn
Fall Montag; Dienstag; Mittwoch; Freitag; Samstag; Donnerstag
Wenn Anwendung.Aufrunden((differenz - (WochentagJahresanfang - 6)) / 7; 0) <= 0 Dann
KW = "KW 52"
Sonst
KW = "KW " + ZnF(Anwendung.Aufrunden((differenz - (WochentagJahresanfang - 6)) / 7; 0))
Ende Wenn
Fall Sonntag
Wenn differenz = 0 Dann differenz = 1
KW = "KW " + ZnF(Anwendung.Aufrunden(differenz / 7; 0))
Ende Prüfe
Verlasse Funktion
Fehlermarke:
MeldungsDlg Fehler()
Ende Funktion
 
< Zurück   Weiter >