Clever-Excel-Forum

Normale Version: Macro - Kalenderwoche
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag zusammen,

ich bin ganz neu hier - kurz zu mir, ich heiße Marc-David, bin 24 aus BW und dualer Student seit kurzem.
Nun wurde mir eine Aufgabe mit einem Excel sheet gegeben.

Ich weiß leider nicht wie ich danach genau suchen soll.


Meine Frage ist, ich habe auf Seite 1 eine Tabelle mit Zahlen, diese Zahlen möchte ich auf Seite 7 in AM4-7 einfügen. Soweit habe ich es auch per Makro hinbekommen.
Ich kopiere die einzelnen Zahlen aus der Tabelle Seite 1 in die Tabelle Seite 7.
Der Gedanke ist jetzt, die Werte auf Seite 1 ändern sich wöchentlich, ich möchte per Makro, Knopfdruck, es jetzt schaffen, dass mein Makro weiß: Hey heute ist Kalenderwoche 41 also dort einfügen, nächste Woche dann, hey heute ist Kalenderwoche 42 also in AN4-7 einfügen und so weiter.
Ist dies möglich?

Schöne Grüße
Marc-David
Hallöchen,

Du kannst beim Range einen Offset verwenden. Wenn bei Range("AM7") z.B. die Daten der KW1 stehen rechnest Du von Range("AL7") aus die KW-Nummern dazu. Allerdings berücksichtigt das erst mal die Jahreswechsel nicht. Dazu später eine Alternative.

Hier mal der Ansatz zum probieren:

Code:
Sub test()
Dim iWeek%
iWeek = WorksheetFunction.WeekNum(Date, 21)
MsgBox Range("AL7").Offset(, iWeek).Address
End Sub
Moin!
Nur ergänzend der Hinweis, dass VBA die KW auch selbständig errechnen kann und nicht auf eine Excel-Funktion ausweichen muss.
Dies ist hier im Excel-Forum zwar unerheblich, macht aber Sinn, wenn man die KW in anderen Office-Programmen per VBA ermitteln will.
PHP-Code:
DatePart("ww"DatevbMondayvbFirstFourDays

Gruß Ralf
Hi

Hinweis zum Hinweis.
DatePart ist aber für KW's in Normalverwendung nicht fehlerfrei.
Code:
DatePart("ww", "30.12.2019", vbMonday, vbFirstFourDays)

https://www.vbarchiv.net/tipps/tipp_1662...vbnet.html

Gruß Elex
Ja, der little Bug ist auch mir bekannt, Elex!
Wenn ich mich recht erinnere, betrifft es aber nur Jahre, in denen der 29.12. ein Montag ist.
Für den Dienstag (30.12.) ist wieder alles roger.
Ich schreibe aber mal flugs ein Programm, welches alle Tage dieses Jahrhunderts mit der Worksheetfunction vergleicht …

Update!
Es betrifft den letzten Montag des Jahres.
Von den 36.191 Tagen dieses Jahrhunderts rechnet Datepart 11-mal falsch.
Ist zwar 11-mal zuviel, aber relativ überschaubar …

Wer es nachprüfen will:
Sub Bug_Report()
Dim KW_VBA&, WSF_KW&, i&
Const Beginn& = 36526 '01.01.2000 
Const Ende& = 72716 '31.12.2099 
For i = Beginn To Ende
  KW_VBA = DatePart("ww", CDate(i), vbMonday, vbFirstFourDays)
  WSF_KW = WorksheetFunction.WeekNum(CDate(i), 21)
  If KW_VBA <> WSF_KW Then Debug.Print Format(CDate(i), "ddd, dd.mm.yy")
Next
End Sub

Ergibt im Direktfenster:
PHP-Code:
Mo29.12.03
Mo
31.12.07
Mo
30.12.19
Mo
29.12.31
Mo
31.12.35
Mo
30.12.47
Mo
29.12.59
Mo
31.12.63
Mo
30.12.75
Mo
29.12.87
Mo
31.12.91 

Gruß Ralf