[英]Get day number within calendar week for a specific date
我有一個包含日期的數據集。 為了報告目的,我需要按周數將其分開。 到目前為止我所擁有的是:
startDate 變量包含 03/01/2015(從電子表格中的數據填充)
startDay = Day(startDate)
startMonth = Month(startDate)
startYear = Year(startDate)
startWeek = Application.WorksheetFunction.WeekNum(DateSerial(startYear, startMonth, startDay))
這給了我 startWeek 的第 1 周
但是我知道需要知道日期到第 1 周還有多久。 所以對於這個例子,因為日期是 1 月 3 日,它包括第 1 周的 3 天
這意味着我整理的報告只會報告 3 天(而不是整周)
到目前為止,我想這樣做的唯一方法是計算日期是一年中的哪一天,並使用 MOD 計算(基本上除以 7,余數是它到一周的距離)
dayNumber = DateDiff("d", DateSerial(startYear, 1, 1), DateSerial(startYear, startMonth, startDay)) + 1
dayOfWeek = dayNumber Mod 7
這確實有效,但我想知道是否有比這更好的解決方案。
您可以使用循環來確定周數在startDate
之前多少天發生了變化:
Public Sub FindDaysInWeekNo()
Dim startDate As Date
startDate = DateSerial(2015, 1, 3)
Dim startWeek As Integer
startWeek = Application.WorksheetFunction.WeekNum(startDate)
Dim i As Integer
Do While startWeek = Application.WorksheetFunction.WeekNum(DateAdd("d", -i, startDate))
i = i + 1
Loop
Debug.Print i '= 3rd day in this week number
End Sub
下表顯示了我與其他建議公式的比較以及為什么我認為( =WEEKNUM
)我的計算是正確的。
請注意,如果您假設1 月 1 日至 7 日為第 1 周(第 1 至 7 天) ,則不能使用WeekNum
函數,因為這會給您不同的結果(請參見上表並注意第一周只有 6 天,根據WeekNum
函數)。 您也不能命名本周編號(因為每個人都稱周編號定義為https://en.wikipedia.org/wiki/Week#Week_numbering )。
相反,您將需要使用……
Public Function AlternativeWeekNum(startDate As Date) As Integer
AlternativeWeekNum = WorksheetFunction.Days(startDate, DateSerial(Year(startDate), 1, 1)) \ 7 + 1 'note that this no normal division but a integer division and uses a backslash instead
End Function
以您的替代方式計算周數,以及……
Public Function AlternativeWeekNumDay(startDate As Date) As Integer
AlternativeWeekNumDay = WorksheetFunction.Days(startDate, DateSerial(Year(startDate), 1, 1)) Mod 7 + 1
End Function
計算隔周的這一天。
您可以為此使用Weekday()
函數:
=WEEKDAY(B4;2)
第二個參數提到您希望如何計算您的天數(從星期日或星期一開始,從 0 或 1 開始計數,...)。
dayOfWeek = (8 + Weekday(startDate) - Weekday(DateSerial(startYear, 1, 1))) mod 7
只需將當前星期幾與每年 1 月 1 日的星期幾之間的差取正mod 7
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.