Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender Navigationstipps
Inhaltsverzeichnis

Hilfe bei Kalenderwochen (VBA)

Hilfe bei Kalenderwochen (VBA)
Peter
Hallo Forum,
wer kann helfen?
Ausgehend von einer beliebigen KW möchte ich alle KW im gleichen Monat in einer UF anzeigen.
Die letzte Kalenderwoche die angezeigt werden soll ist Kalenderwoche die den 1.Tag des Folgemonats enthält
- zum besseren Verständnis siehe UF mit dem VBA Versuch
https://www.herber.de/bbs/user/65884.xls
Danke Peter

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Kalenderwochen eines Monats (VBA)
13.11.2009 23:05:59
Erich
Hi Peter,
probiers mal damit:

Private Sub CmdWeiter_Click()
Dim intKW As Integer, intJahr As Integer, ii As Integer
Dim datVon As Date, datMonBeg As Date, datMontag As Date
intKW = TxtKWo1.Value
intJahr = Format(Date, "yyyy")
datVon = Datum_aus_Woche(intJahr, intKW)
datMonBeg = datVon - Day(datVon) + 1
datMontag = datMonBeg - Weekday(datMonBeg, vbTuesday)
For ii = 0 To 5
Controls("TxtKWo" & ii + 1).Text = KalenderWoche(datMontag)
Controls("LblWoVon" & ii + 1).Caption = datMontag
Controls("LblWoBis" & ii + 1).Caption = datMontag + 6
datMontag = datMontag + 7
If Month(datMontag)  Month(datMonBeg) Then Exit For
Next ii
End Sub
Die Prozedur überschreibt z. B. bei der Eingabe von 53 (in TxtKWo1)
den Inhalt der TB mit der ersten Woche, die in den Dezember 2009 fällt, also 49.
Die folgenden vier TBs werden mit KW 50 bis 53 gefüllt.
(In anderen Jahren kann es auch vorkommen, dass am Jahresende die nächste KW = 1 ist.)
Manchmal im Februar fallen nur 4 Wochen in den Monat,
manchmal fallen auch 6 Wochen in einen Monat (wenn du z. B. KW 45 vorgibst).
Die in Labels angezeigten Tage muss man nicht kompliziert rechnen - es sind einfach immer 7 mehr.
Ist es das, was du möchtest?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Kalenderwochen eines Monats (VBA)
14.11.2009 06:52:36
peter
Hallo Erich,
erstmal vielen Dank für Deine schnelle Antwort.
So ganz ist es nicht das was ich meine. Das liegt bestimmt daran,
dass ich mich umständlich ausgedrückt habe.
z.B. - bei der Eingabe von von 47 in der KW Abfrage
brauchen nur die KW 47, KW 48 und KW 49 in der Übersicht der UF
aufgeführt werden
z.B. - bei der Eingabe von von 6 in der KW Abfrage
brauchen nur die KW 6, KW 7, KW 8 und KW 9 in der Übersicht der UF
aufgeführt werden
z.B. - bei der Eingabe von von 9 in der KW Abfrage
brauche nur die KW 9 in der Übersicht der UF
aufgeführt werden
Peter
Anzeige
Kalenderwochen bis Ende des Monats
14.11.2009 09:51:22
Erich
Hi Peter,
das geht etwas kürzer. Probier mal:

Private Sub CmdWeiter_Click()
Dim intKW As Integer, intJahr As Integer, ii As Integer
Dim datVon As Date, datMontag As Date
intKW = TxtKWo1.Value
intJahr = Format(Date, "yyyy")
datVon = Datum_aus_Woche(intJahr, intKW)
datMontag = datVon - (datVon - 2) Mod 7
For ii = 0 To 5
Controls("TxtKWo" & ii + 1).Text = KalenderWoche(datMontag)
Controls("LblWoVon" & ii + 1).Caption = datMontag
Controls("LblWoBis" & ii + 1).Caption = datMontag + 6
datMontag = datMontag + 7
If Month(datMontag)  Month(datVon) Then Exit For
Next ii
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort - Schönes WoEnde!
Anzeige
AW: Kalenderwochen bis Ende des Monats
14.11.2009 19:42:06
Peter
Hallo Erich,
ich möchte mich ganz herzlich für die Mühe die Du dir gemacht hast bedanken.
Deine Erklärungen sind sehr hilfreich. Dadurch komme ich endlich weiter.
Ich wünsche Dir ein schönes Restwochenende
Peter
noch ein Tipp: KW immer mit Jahr
14.11.2009 10:20:53
Erich
Hi Peter,
hin und wieder kannst du damit Probleme bekommen, wenn du nur die KW eingeben lässt.
Es gibt Jahre, in denen eine KW-Nr. zweimal auftritt - am Anfang und am Ende des Jahres.
Beispiele:
 ABCD
1DatumKWvonbis
2Mi  02.01.20081Mo  31.12.2007So  06.01.2008
3Di  30.12.20081Mo  29.12.2008So  04.01.2009
4    
5So  01.01.201252Mo  26.12.2011So  01.01.2012
6Do  27.12.201252Mo  24.12.2012So  30.12.2012
7    
8Mi  02.01.20131Mo  31.12.2012So  06.01.2013
9Mo  30.12.20131Mo  30.12.2013So  05.01.2014

Formeln der Tabelle
ZelleFormel
B2=KalenderWoche(A2)
C2=A2-REST(A2-2;7)
D2=C2+6

Wenn du in 2012 eine 52 oder in 2013 eine 1 als KW vorgibst, ist nicht klar,
welche der jeweils beiden Wochen gemeint ist. Das KW-Jahr müsste auch vorgegeben werden.
Dazu könntest du dir auch das mal ansehen: http://www.excelformeln.de/formeln.html?welcher=7
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Kalenderwoche mit Jahr
14.11.2009 18:52:31
Erich
Hi Peter,
hier noch ein paar Excelformeln und Beispiele, wo das KW-Jahr eine Rolle spielt:
( in Anlehnung an http://www.excelformeln.de/formeln.html?welcher=7 )
 ABCD
1Berechnung des KW-Jahres und der KW mit dem KW-Jahr
2    
3Datum29.12.200803.01.2010 
4KW (natürlich wie bisher)153 
5KW-Jahr bisherige Formel20092009 
6KW-Jahr bisherige Formel20092009 
7KW-Jahr20092009 
8    
9W/JJJJ als Text - bisherige Formel1/200953/2009schlecht für Sort
10JJJJ/WW als Text2009/012009/53besser für Sort
11Jahr daraus20092009 
12KW daraus153 
13    
14JJJJ,WW als Dezimalzahl2009,012009,53besser für Sort
15Jahr daraus20092009 
16KW daraus153 
17    
18    
19Anzahl der KW des Jahres vs. Anzahl der KW im Jahr
20    
21Jahr200920102012
22Anzahl Wochen des Jahres (wie bisher)535252
23Anzahl Wochen im Jahr - Variante 1535354
24Anzahl Wochen im Jahr - Variante 2535354

Formeln der Tabelle
ZelleFormel
B4=KÜRZEN((B3-DATUM(JAHR(B3+3-REST(B3-2;7)); 1;REST(B3-2;7)-9))/7)
B5=JAHR(B3)-(MONAT(B3)=1)*(B4>9)+(MONAT(B3)=12)*(B4=1)
B6=MIN(JAHR(B3-1-REST(B3-2;7)+4); JAHR(B3-REST(B3-1;7)+4))
B7=JAHR(B3+3-REST(B3-2;7))
B9=KÜRZEN((B3-DATUM(JAHR(B3+3-REST(B3-2;7)); 1;REST(B3-2;7)-9))/7)&"/"&MIN(JAHR(B3-1-REST(B3-2;7)+4); JAHR(B3-REST(B3-1;7)+4))
B10=JAHR(B3+3-REST(B3-2;7))&"/"&TEXT(KÜRZEN((B3-DATUM(JAHR(B3+3-REST(B3-2;7)); 1;REST(B3-2;7)-9))/7); "00")
B11=--LINKS(B10;4)
B12=--RECHTS(B10;2)
B14=JAHR(B3+3-REST(B3-2;7))+KÜRZEN((B3-DATUM(JAHR(B3+3-REST(B3-2;7)); 1;REST(B3-2;7)-9))/7)/100
B15=KÜRZEN(B14;)
B16=100*REST(B14;1)
B22=52+(TAG(346-REST("2.1."&B21;7)+("1-"&B21))<8)
B23=53+(TAG(("1.3."&B21)-1)=29)*(TEXT("1.1."&B21;"TTT")="So")
B24=53+(TAG(("1.3."&B21)-1)=29)*(REST("1.1."&B21;7)=1)

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige