如何填充从第 52 周后的第 1 周开始的周数数组?
How to fill an array of week numbers that restarts at week 1 after week 52?
在单元格 B2:开始日期 和单元格 B3:结束日期
示例:
B2 --> 2019 年 1 月 12 日
B3 --> 03/02/2020
我的代码
With ThisWorkbook.Sheets("Foglio1") 'remember to fully qualify your ranges, including the workbook
StartDate = .Range("B2")
EndDate = .Range("B3")
End With
Dim StrtD As Long, EndD As Long
Dim provaprova As Integer
With Sheets("Foglio1")
StrtD = Application.WeekNum(StartDate, 2)
provaprova = DateDiff("w", StartDate, EndDate)
EndD = StrtD + provaprova
arr = .Evaluate("COLUMN(" & .Cells(1, StrtD).Address & ":" & .Cells(1, EndD).Address & ")")
我的输出:arr(48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58)
我想要:arr(48, 49, 50, 51, 52, 1, 2, 3, 4, 5)
由于 年有 52 周,我想在 第 52 周 之后的第 第 1 周.
这个答案将基于我们的讨论,并且与 question on weeknumbers and 月中的两者密切相关。
这里的问题是时间跨度跨入了新的一年。因此,我会根据月份调整我的答案,以适应我对本周问题的回答:
所以请尝试:
Sub Test()
Dim StartD As Long, EndD As Long, EndW As Long
Dim arr As Variant
With Sheets("Foglio1")
StartD = .Cells(1, 2).Value - Application.Weekday(.Cells(1, 2).Value, 2)
EndD = .Cells(2, 2).Value - Application.Weekday(.Cells(2, 2).Value, 2) + 7
EndW = DateDiff("ww", StartD, EndD)
arr = Application.Transpose(.Evaluate("WEEKNUM(" & StartD & "+(ROW(1:" & EndW & ")*7),2)"))
End With
End Sub
这将 return 一个 48, 49, 50, 51, 52, 1, 2, 3, 4, 5, 6
.
的数组
在这种情况下使用 DateDiff
有点困难,因为有时日期之间不会花费整整几周的时间,具体取决于一周中还剩下多少天。但是,查看一周的前几天将解决这个问题。
希望这能回答您的问题。
在单元格 B2:开始日期 和单元格 B3:结束日期
示例:
B2 --> 2019 年 1 月 12 日
B3 --> 03/02/2020
我的代码
With ThisWorkbook.Sheets("Foglio1") 'remember to fully qualify your ranges, including the workbook
StartDate = .Range("B2")
EndDate = .Range("B3")
End With
Dim StrtD As Long, EndD As Long
Dim provaprova As Integer
With Sheets("Foglio1")
StrtD = Application.WeekNum(StartDate, 2)
provaprova = DateDiff("w", StartDate, EndDate)
EndD = StrtD + provaprova
arr = .Evaluate("COLUMN(" & .Cells(1, StrtD).Address & ":" & .Cells(1, EndD).Address & ")")
我的输出:arr(48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58)
我想要:arr(48, 49, 50, 51, 52, 1, 2, 3, 4, 5)
由于 年有 52 周,我想在 第 52 周 之后的第 第 1 周.
这个答案将基于我们的讨论,并且与
这里的问题是时间跨度跨入了新的一年。因此,我会根据月份调整我的答案,以适应我对本周问题的回答:
所以请尝试:
Sub Test()
Dim StartD As Long, EndD As Long, EndW As Long
Dim arr As Variant
With Sheets("Foglio1")
StartD = .Cells(1, 2).Value - Application.Weekday(.Cells(1, 2).Value, 2)
EndD = .Cells(2, 2).Value - Application.Weekday(.Cells(2, 2).Value, 2) + 7
EndW = DateDiff("ww", StartD, EndD)
arr = Application.Transpose(.Evaluate("WEEKNUM(" & StartD & "+(ROW(1:" & EndW & ")*7),2)"))
End With
End Sub
这将 return 一个 48, 49, 50, 51, 52, 1, 2, 3, 4, 5, 6
.
在这种情况下使用 DateDiff
有点困难,因为有时日期之间不会花费整整几周的时间,具体取决于一周中还剩下多少天。但是,查看一周的前几天将解决这个问题。
希望这能回答您的问题。