VBScript 中的 ISO 周数或 VBA
ISO week number in VBScript or VBA
如何在 VBScript 或 VBA 中获取某个日期的 ISO week number?
首先,请注意:
- 报告第 年 周和周数很重要,因为日期的年份可能不同。
- 几个 Windows 组件包含 a bug 某些年份的最后一个星期一。
根据我的经验,最简单、最清晰和最可靠的计算方法是:
Sub WeekNum(someDate, isoWeekYear, isoWeekNumber, isoWeekDay)
Dim nearestThursday
isoWeekDay = WeekDay(someDate, vbMonday)
nearestThursday = DateAdd("d", 4 - Int(isoWeekDay), someDate)
isoWeekYear = Year(nearestThursday)
isoWeekNumber = Int((nearestThursday - DateSerial(isoWeekYear, 1, 1)) / 7) + 1
End Sub
这也是 returns ISO 星期几,从 1 开始计算星期一。
在 A1 单元格中输入任何日期,然后 运行 以下代码...
Range("A2").FormulaR1C1 = "=INT((R1C-DATE(YEAR(R1C-WEEKDAY(R1C-1)+4),1,3)+WEEKDAY(DATE(YEAR(R1C-WEEKDAY(R1C-1)+4),1,3))+5)/7)"
可以通过DatePart()VBA函数获取:
Sub IsoWeek()
Dim isoWeekNum As Byte
Dim myDate As Date
myDate = DateValue("01-01-2022")
isoWeekNum = DatePart("ww", myDate, vbMonday, vbFirstFourDays)
If isoWeekNum > 52 Then ' Bug check (to avoid the bug with Mondays)
If Format(myDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then isoWeekNum = 1
End If
Debug.Print isoWeekNum
End Sub
如何在 VBScript 或 VBA 中获取某个日期的 ISO week number?
首先,请注意:
- 报告第 年 周和周数很重要,因为日期的年份可能不同。
- 几个 Windows 组件包含 a bug 某些年份的最后一个星期一。
根据我的经验,最简单、最清晰和最可靠的计算方法是:
Sub WeekNum(someDate, isoWeekYear, isoWeekNumber, isoWeekDay)
Dim nearestThursday
isoWeekDay = WeekDay(someDate, vbMonday)
nearestThursday = DateAdd("d", 4 - Int(isoWeekDay), someDate)
isoWeekYear = Year(nearestThursday)
isoWeekNumber = Int((nearestThursday - DateSerial(isoWeekYear, 1, 1)) / 7) + 1
End Sub
这也是 returns ISO 星期几,从 1 开始计算星期一。
在 A1 单元格中输入任何日期,然后 运行 以下代码...
Range("A2").FormulaR1C1 = "=INT((R1C-DATE(YEAR(R1C-WEEKDAY(R1C-1)+4),1,3)+WEEKDAY(DATE(YEAR(R1C-WEEKDAY(R1C-1)+4),1,3))+5)/7)"
可以通过DatePart()VBA函数获取:
Sub IsoWeek()
Dim isoWeekNum As Byte
Dim myDate As Date
myDate = DateValue("01-01-2022")
isoWeekNum = DatePart("ww", myDate, vbMonday, vbFirstFourDays)
If isoWeekNum > 52 Then ' Bug check (to avoid the bug with Mondays)
If Format(myDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then isoWeekNum = 1
End If
Debug.Print isoWeekNum
End Sub