VBA将date转换为周数

在VBA中,我想将date作为03/11/2017(DD / MM / YYYY)转换为当天的星期编号。

到现在为止,我有以下代码:

'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) 

现在,我需要一个函数来将该date转换为一年中的星期数。 第一个星期是星期一。

要将星期一作为第一天的星期编号,请使用以下内容:

 WorksheetFunction.WeekNum(now,vbMonday) 

因为周围有不同的定义,所以在周数方面要小心。 Excel定义与ISO定义不同。 要获取ISO周数使用(从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 

使用VBA将date转换为一个isoWeeknumber,您只需要DatePart函数(其中DT是感兴趣的date):

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

如果您想使用ISO 8601中规定的其他定义,请调查FirstDayOfWeekFirstWeekOfYear的其他一些选项

WeekdayName( number, [abbreviate], [firstdayofweek] ) WeekdayName(2)结果:'Monday'

WeekdayName(2, TRUE)结果:'Mon'

WeekdayName(2, TRUE, vbMonday)结果:'Mon'

所以,这是我的最后和完美版本

 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)