VBAでは、日付を2017年3月11日(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)
次に、その日付を年の週番号に変換する関数が必要です。最初の平日は月曜日です。
月曜日を初日として週番号を作成するには、次を使用します。
WorksheetFunction.WeekNum(now, vbMonday)
VBAを使用して、日付をisoWeeknumberに変換するには、DatePart
関数が必要です(DTは対象の日付です)。
isoWeekNumber = DatePart("ww", DT, vbMonday, vbFirstFourDays)
ISO 8601で指定されている定義以外の定義を使用する場合は、FirstDayOfWeek
およびFirstWeekOfYear
の他のオプションのいくつかを調べてください。
異なる定義が存在するため、週番号に関しては注意してください。 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
だから、これは私の最終的な、完全に動作するバージョンです
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)
WeekdayName( number, [abbreviate], [firstdayofweek] ) WeekdayName(2)
結果: '月曜日'
WeekdayName(2, TRUE)
結果: '月'
WeekdayName(2, TRUE, vbMonday)
結果: '月'