如何填充从第 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 有点困难,因为有时日期之间不会花费整整几周的时间,具体取决于一周中还剩下多少天。但是,查看一周的前几天将解决这个问题。

希望这能回答您的问题。