wake-up-neo.com

VBA Konvertieren Sie das Datum in die Wochennummer

In VBA möchte ich ein Datum als 11.03.2017 (TT/MM/JJJJ) in die Wochennummer für dieses Datum umwandeln.

Bis jetzt habe ich den folgenden Code: 

   'geting the date out of the string
    HeadlineTemp = Mid(VRHeadline, InStr(VRHeadline, "[") + 1, 10)
   'switch "." to "/"
    HeadlineTemp = Replace(HeadlineTemp, ".", "/")
   'convert to a date
    FristVRFirstKW = CDate(HeadlineTemp)

Jetzt brauche ich eine Funktion, um dieses Datum in die Wochennummer des Jahres umzuwandeln. Der erste Wochentag ist Montag.

2
USER7423

Um die Wochennummer mit Montag als ersten Tag festzulegen, verwenden Sie Folgendes:

WorksheetFunction.WeekNum(now,vbMonday)
6
Vityata

Um ein Datum in eine isoWeeknumber umzuwandeln, benötigen Sie lediglich die Funktion DatePart (wobei DT das Datum des Interesses ist):

isoWeekNumber = DatePart("ww", DT, vbMonday, vbFirstFourDays)

Wenn Sie andere als die in ISO 8601 angegebenen Definitionen verwenden möchten, untersuchen Sie einige der anderen Optionen für FirstDayOfWeek und FirstWeekOfYear.

3
Ron Rosenfeld

Seien Sie vorsichtig bei den Wochennummern, da es unterschiedliche Definitionen gibt. Die Excel-Definition unterscheidet sich von der ISO-Definition. Um die ISO-Wochennummer zu erhalten, verwenden Sie (kopiert von http://www.rondebruin.nl/win/s8/win001.htm ).

Public Function IsoWeekNumber(d As Date) As Integer
    Dim d2 As Long
    d2 = DateSerial(Year(d - Weekday(d - 1) + 4), 1, 3)
    IsoWeekNumber = Int((d - d2 + Weekday(d2) + 5) / 7)
End Function
1
FunThomas

Das ist also meine endgültige und perfekt funktionierende Version

Public Function IsoWeekNumber(d As Date) As String

    Dim kwtemp As String

    kwtemp = DatePart("ww", d, vbMonday, vbFirstFourDays)

    If Len(kwtemp) = 1 Then kwtemp = "0" & kwtemp

    IsoWeekNumber = kwtemp

End Function

If Application.International(xlMDY) = True Then

HeadlineTemp = Mid(VRHeadline, InStr(VRHeadline, "[") + 1, 10)
HeadlineTemp = Replace(HeadlineTemp, ".", "/")
HeadlineTemp = Mid(HeadlineTemp, 4, 3) & Left(HeadlineTemp, 2) & Right(HeadlineTemp, 5)
VRFirstKW = CDate(HeadlineTemp)
HeadlineTempEndKW = Mid(VRHeadline, InStr(VRHeadline, "]") - 10, 10)
HeadlineTempEndKW = Replace(HeadlineTempEndKW, ".", "/")
HeadlineTempEndKW = Mid(HeadlineTempEndKW, 4, 3) & Left(HeadlineTempEndKW, 2) & Right(HeadlineTempEndKW, 5)
VREndKW = CDate(HeadlineTempEndKW)
VRKW = "KW" & IsoWeekNumber(VRFirstKW) & "-" & IsoWeekNumber(VREndKW) & "/" & Year(VREndKW)

    Else 'don't switch position of the month with days

    HeadlineTemp = Mid(VRHeadline, InStr(VRHeadline, "[") + 1, 10)
    HeadlineTemp = Replace(HeadlineTemp, ".", "/")
    VRFirstKW = CDate(HeadlineTemp)
    HeadlineTempEndKW = Mid(VRHeadline, InStr(VRHeadline, "]") - 10, 10)
    HeadlineTempEndKW = Replace(HeadlineTempEndKW, ".", "/")
    VREndKW = CDate(HeadlineTempEndKW)
    VRKW = "KW" & IsoWeekNumber(VRFirstKW) & "-" & IsoWeekNumber(VREndKW) & "/" & Year(VREndKW)
0
USER7423

WeekdayName( number, [abbreviate], [firstdayofweek] ) WeekdayName(2) Ergebnis: 'Montag'

WeekdayName(2, TRUE) Ergebnis: 'Mon'

WeekdayName(2, TRUE, vbMonday) Ergebnis: 'Mon'

0
mani