我們可以找到不同的方法來確定月份中的第幾周,盡管 1:4 和/或 1:5 的頁面很多,但 1:6 左右的方法很少。
因此,為了給您一些背景關系,我正在使用 Excel 中的資料透視表,它從 Power Query 源獲取其值。在 Power Query 中,有一個函式Date.WeekOfMonth接受日期并回傳 1 到 6 之間的數字。在此定義中,周從星期日開始,到星期六結束。因此,例如,2021 年 10 月的前兩天(即周五和周六)在 10 月的第一周,而 2021 年 10 月的第三天從第二周開始,然后是 2021 年 10 月的最后一天,即 10 月 31 , 是第 6 周的唯一一天。
我手頭有一個自動化任務,我需要從 Power Query 生成的資料透視表中提取資料,所以我必須在 VBA 中實作一段代碼,它的計算周數相同。不幸的是,我找不到任何準備好的片段,所以在實作之后我雖然可能值得分享。(任何意見和建議表示贊賞)
uj5u.com熱心網友回復:
該日期部分功能是為這個完美的。使用DatePart設定為“周”的間隔,您可以找到給定日期的周。然后減去該月第一天之前的周數(將第一天設定為周 = 1)。
Function WeekNumOfDate(D As Date) As Integer
WeekNumOfDate = DatePart("ww", D) - DatePart("ww", DateSerial(Year(D), Month(D), 1)) 1
End Function
這是具有設定FirstDayOfWeek引數能力的函式的第二個版本:
Function WeekNumOfDate(D As Date, Optional FirstDayOfWeek As VbDayOfWeek = vbSunday) As Integer
WeekNumOfDate = DatePart("ww", D, FirstDayOfWeek) - DatePart("ww", DateSerial(Year(D), Month(D), 1), FirstDayOfWeek) 1
End Function
作為使用示例FirstDayOfWeek:FirstDayOfWeek設定為vbThursday,日期“2021 年 11 月 5 日”將回傳為第 2 周,而默認情況下將被計為第 1 周。2021 年 11 月 1 日至 3 日將是第 1 周,然后是第 4 周到10 日將是第 2 周。
uj5u.com熱心網友回復:
它在 VBA 中的實作是:
Function WeekOfMonth(My_Date As Date)
If Day(My_Date) > Day(My_Date - 1) And Weekday(My_Date) > Weekday(My_Date - 1) Then
WeekOfMonth = WeekOfMonth(My_Date - 1)
ElseIf Day(My_Date) > Day(My_Date - 1) And Weekday(My_Date) < Weekday(My_Date - 1) Then
WeekOfMonth = WeekOfMonth(My_Date - 1) 1
Else
WeekOfMonth = 1
End If
End Function
請注意,盡管上述函式是遞回的,但其時間和空間復雜度是 N 階運算式,此處不能超過 31。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/371429.html
