在本文中,我们将创建一个用户定义函数(UDF)或自定义函数来查找任何给定星期的第一个日期,并将星期一作为一周的第一天。我们将创建一个自定义函数,该函数将返回给定年份,月份或日期中指定周数之后的一周的第一天。

在本文中,原始数据包括星期数,日,月和年。

自定义功能将以日,月,年和周的数字作为输入参数。根据这些输入值,函数将返回一周的第一天。

ArrowRawData

自定义函数“ WeekStartDate”的语法是WeekStartDate(WeekNumber,Year,Month,Day)

月和日是可选参数。

此功能假定星期一为一周的第一天。

WeekStartDate函数返回从Day,Month和Year参数指定的日期起指定星期数之后的一周的第一天。如果未指定Day参数,则它将返回由指定年份的Month参数指定的月份中指定的星期数之后的一周的第一天。如果未同时指定Month和Day参数,则它将返回一年中指定星期的第一天。

ArrowOutput

逻辑解释

我们创建了“ WeekStartDate”自定义函数来查找一周的第一天。用于此功能的逻辑是,如果给定日期的星期几小于4,则将当前星期视为第一周。否则,如果给定日期的工作日大于4,则下周将被视为第一周。

代码说明

DateSerial(intYear,intMonth,intDay)

DateSerial函数用于从日期,月份和年份值获取日期。

工作日(FromDate,vbMonday)

Weekday函数用于获取日期的星期几,将星期一视为一周的第一天。

如果WKDay> 4,则WDays =(7 intWeek)-WKDay + 1其他WDays =(7(intWeek-1))-WKDay + 1 End如果上述代码用于查找要包括的天数以查找第一个日期一周中的。如果星期几的值小于4,则将当前星期视为第一周。这就是为什么我们减去1,即

(intWeek-1)。添加1是因为我们要查找一周的第一天。

请遵循以下代码

Option Explicit

Function WeekStartDate(intWeek As Integer, intYear As Integer, Optional intMonth As Integer = 1, Optional intDay As Integer = 1)

'Declaring variables

Dim FromDate As Date, lngAdd As Long

Dim WKDay, WDays As Integer

WDays = 0

'Checking that year should not have negative value

If intYear < 1 Then

WeekStartDate = "Year cann't have negative value"

Exit Function

End If

'Calculating the date

FromDate = DateSerial(intYear, intMonth, intDay)

'Getting the week day of the specified date considering monday as first day

WKDay = Weekday(FromDate, vbMonday)

'If value of week day is less than 4 then subtracting 1 from the week number

If WKDay > 4 Then

WDays = (7 * intWeek) - WKDay + 1

Else

WDays = (7 * (intWeek - 1)) - WKDay + 1

End If

'Return the first day of the week

WeekStartDate = FromDate + WDays



End Function

如果您喜欢此博客,请在Facebook和Facebook上与您的朋友分享。

我们希望收到您的来信,请让我们知道如何改善我们的工作并为您做得更好。写信给我们[email protected]