簡體   English   中英

獲取特定日期日歷周內的天數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM