获取日历周内特定日期的天数

时间:2018-12-18 09:29:16

标签: excel vba excel-vba

我有一个包含日期的数据集。 为了报告目的,我需要按周数进行拆分。 到目前为止,我有:

startDate变量,包含03/01/2015(从电子表格中的数据填充)

<link href="https://cdnjs.cloudflare.com/ajax/libs/tippy.js/3.1.3/tippy.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tippy.js/3.1.3/tippy.min.js"></script>
<input autocomplete="off" type="text"  id="mobilenumber" onkeyup="validateIndianMobile(this);">

这给了我startWeek的第一周

但是我知道需要知道日期在第一周有多远。 因此,在此示例中,由于日期是1月3日,因此它包含第1周的3天

意思是我要汇总的报告只会在3天(而不是整周)内报告

到目前为止,我唯一想到的方法是计算日期是一年中的哪一天,并使用MOD计算(基本上除以7,其余是到星期几)< / p>

startDay = Day(startDate)
startMonth = Month(startDate)
startYear = Year(startDate)

startWeek = Application.WorksheetFunction.WeekNum(DateSerial(startYear, startMonth, startDay))

这确实有效,但是我想知道是否有比此更好的解决方案。

3 个答案:

答案 0 :(得分:1)

您可以使用循环来确定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)计算正确。

enter image description here

请注意,如果您假设1月1日至7月1日(第1天至7天),则不能使用WeekNum函数,因为这会给您带来不同的结果(请参见上表,请注意,根据WeekNum函数,第一周只有6天。)此外,您也无法命名本周号(因为每个人都称其为周号被定义为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

计算另一周中的日期。

答案 1 :(得分:0)

您可以为此使用Weekday()函数:

=WEEKDAY(B4;2)

第二个参数提到您希望如何对天进行计数(从星期日或星期一开始,从0或1开始计数,...)。

答案 2 :(得分:-1)

https://www.example.com/property/villa-alexia/BC-1414?tes=dfgdf&fcb=5&show_pinned_search=1
http://www.example.com/property/hyat-doral/HA-4509801?show_pinned_search=1
https://www.example.com/property/villa-alexia/BC-1414?tes=dfgdf&fcb=5&show_pinned_search=1
http://www.example.com/property/hyat-doral/HA-4509801?show_pinned_search=1
http://www.example.com/property/hyat-doral/HA-4509801?show_pinned_search=1
https://www.example.com/property/villa-alexia/BC-1414?tes=dfgdf&fcb=5&show_pinned_search=1

只要取正的dayOfWeek = (8 + Weekday(startDate) - Weekday(DateSerial(startYear, 1, 1))) mod 7 mod 7到当前年份与每年1月1日这一周的日期之差即可。